Вопрос о Cake Pattern - PullRequest
       20

Вопрос о Cake Pattern

3 голосов
/ 05 мая 2011

В статье Cake Pattern предлагается использовать признаки в качестве пространств имен:

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

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

class Context extends UserServiceComponent with UserRepositoryComponent {  
  val userRepository = new UserRepository  
  val userService = new UserService  
} 

Однако нам действительно нужны эти "признаки пространства имен" (UserServiceComponent и UserRepositoryComponent), если мыможет сделать следующее?

trait UserRepository {...}

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

class Context extends UserRepositoryImpl with UserService

Итак, мой вопрос: когда и зачем нам нужна черта «пространства имен» в Cake Pattern.

Ответы [ 2 ]

5 голосов
/ 05 мая 2011

В вашем подходе есть 2 недостатка:

  1. Context получает слишком большую ответственность, смешивая методы из UserRepository, UserService и т. Д .;
  2. В первом фрагменте вы можете контролировать порядок инициализации или отложить его для некоторых компонентов - например, вы можете сделать userRepository a lazy val, что значительно упростит тестирование, если вы хотите протестировать только userService (итаким образом, я не хочу загружать всю инфраструктуру);

Хотя я бы не рекомендовал этого, в первом случае вы также можете изменять инъекционные сущности во время выполнения (используя var s).).

2 голосов
/ 05 мая 2011

Как и в случае с любым другим шаблоном, он вам нужен, когда он делает ваш код более чистым / более читабельным / более удобочитаемым / более тестируемым.

В этом случае вам может потребоваться создать альтернативный контекст для целей тестирования,замена некоторых или всех компонентов, используемых в «производственной» версии, - задача, которую легче решить, и которая более самодокументируется, если выполнить ее по шаблону, описанному в статье.

Как указал Васильразделение интересов здесь - хорошая вещь (tm), и это в значительной степени весь смысл модели торта.

...