Cake Pattern看起来如下:
trait UserRepositoryComponent {
val userRepository: UserRepository
class UserRepository {...}
}
trait UserServiceComponent {this: UserRepositoryComponent =>
val userService: UserService
class UserService {...}
}
类UserService
和UserRepository
是真正的业务类。我们可以在有或没有蛋糕模式的情况下使用它们。
相反,UserServiceComponent
和 UserRepositoryComponent
特征只是辅助样板代码,而不是真正的业务组件。我们需要它们来实现该模式。
鉴于此,我不希望 UserService
和 UserRepository
成为 UserServiceComponent
和 UserRepositoryComponent
的内部类。是否有意义?我可以不将它们实现为内部类吗?
最佳答案
您不需要包装您的实现类,例如你可以写这样的东西:
trait UserRepository { ... }
trait UserService { this: UserRepository => ... }
但是创建组件需要一次实例化包含所有组件的单个对象:
new UserRepositoryImpl with UserServiceImpl
因此,来自 UserRepository
和 UserService
的方法将混合在单个实例中,这不一定是您想要的(如果您的组件定义方法,这会导致问题同名)。
因此,将组件包装在“样板”特征中可以创建有用的命名空间。
关于scala - Cake Pattern 中如何分离业务类和辅助特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5916437/