Cake Pattern如下所示:
trait UserRepositoryComponent {
val userRepository: UserRepository
class UserRepository {...}
}
trait UserServiceComponent {this: UserRepositoryComponent =>
val userService: UserService
class UserService {...}
}
类UserService
和UserRepository
是真正的业务类。我们可以使用带有和没有Cake模式的它们。
相反,特征UserServiceComponent
和UserRepositoryComponent
只是辅助样板代码而不是真正的业务组件。我们只需要它们来实现模式。
鉴于此,我不希望UserService
和UserRepository
成为UserServiceComponent
和UserRepositoryComponent
的内部类。是否有意义?我可以不将它们作为内部类来实现吗?
答案 0 :(得分:3)
您没有需要来包装您的实现类,例如你可以这样写:
trait UserRepository { ... }
trait UserService { this: UserRepository => ... }
但是创建组件需要同时实例化包含所有组件的单个对象:
new UserRepositoryImpl with UserServiceImpl
因此,来自UserRepository
和UserService
的方法将混合在一个实例中,这不一定是您想要的(如果您的组件定义具有相同名称的方法,则会导致问题)。
因此,将组件包装在“样板”特征中会创建有用的命名空间。