scala - Cake Pattern 中如何分离业务类和辅助特征?

标签 scala dependency-injection

Cake Pattern看起来如下:

trait UserRepositoryComponent {  
  val userRepository: UserRepository  
  class UserRepository {...}
}

trait UserServiceComponent {this: UserRepositoryComponent =>   
  val userService: UserService    
  class UserService {...}  
}

UserServiceUserRepository是真正的业务类。我们可以在有或没有蛋糕模式的情况下使用它们。

相反,UserServiceComponentUserRepositoryComponent 特征只是辅助样板代码,而不是真正的业务组件。我们需要它们来实现该模式。

鉴于此,我不希望 UserServiceUserRepository 成为 UserServiceComponentUserRepositoryComponent 的内部类。是否有意义?我可以不将它们实现为内部类吗?

最佳答案

不需要包装您的实现类,例如你可以写这样的东西:

trait UserRepository { ... }
trait UserService { this: UserRepository => ... }

但是创建组件需要一次实例化包含所有组件的单个对象:

new UserRepositoryImpl with UserServiceImpl

因此,来自 UserRepositoryUserService 的方法将混合在单个实例中,这不一定是您想要的(如果您的组件定义方法,这会导致问题同名)。

因此,将组件包装在“样板”特征中可以创建有用的命名空间。

关于scala - Cake Pattern 中如何分离业务类和辅助特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5916437/

相关文章:

scala - 关于使用 scalatest 和简单构建工具的清晰说明

scala Breeze ,从矩阵中删除列或行

基于 Spring Boot 构造函数的依赖注入(inject)

angular - 尝试手动注入(inject) NgControl 时出现 Lint 警告 "get is deprecated"

laravel-4 - BindingResolutionException 目标 [Illuminate\Database\Eloquent\Model] 不可实例化

scala - Akka HTTP 服务器接收带有其他字段的文件

scala - 套接字连接的惯用异常处理

javascript - Angular2依赖注入(inject),类继承期间不注入(inject)服务

c# - Action 过滤器上的简单注入(inject)器属性注入(inject)

regex - Scala 检查字符串是否不包含特殊字符