2011-05-06 26 views
2

Cake Pattern如下所示:如何区分Cake Pattern中的业务类和辅助特征?

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

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

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

相反,性状UserServiceComponentUserRepositoryComponent只是辅助样板代码而不是真实的业务组件。我们需要他们来实现这一模式。

鉴于此,我不喜欢UserServiceUserRepository是内部类UserServiceComponentUserRepositoryComponent。是否有意义?我可以将它们作为内部类吗?

回答

3

你不需要需要来包装你的实现类,例如,你可以写这样的事情:

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

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

new UserRepositoryImpl with UserServiceImpl 

所以,从UserRepositoryUserService方法将会在混合一个单一的实例,这不一定是你想要的(如果你的组件定义了具有相同名称的方法会导致问题)。因此,将组件包装在“样板”特征中会创建有用的名称空间。