2011-05-06 23 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方法將會在混合一個單一的實例,這不一定是你想要的(如果你的組件定義了具有相同名稱的方法會導致問題)。因此,將組件包裝在「樣板」特徵中會創建有用的名稱空間。