Как разделить бизнес-классы и вспомогательные черты в Cake Pattern? - PullRequest
2 голосов
/ 07 мая 2011

Шаблон Cake выглядит следующим образом:

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.Имеет ли это смысл?Могу ли я реализовать их не как внутренние классы?

1 Ответ

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

Вам не нужно , чтобы обернуть свои классы реализации, например, вы можете написать что-то вроде этого:

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

Но для создания ваших компонентов потребуется создать один объект, содержащий всеваши компоненты сразу:

new UserRepositoryImpl with UserServiceImpl

Итак, методы из UserRepository и UserService будут смешаны в одном экземпляре, что не обязательно то, что вы хотите (и что может вызвать проблемы, если ваши компоненты определяютметоды с тем же именем).

Таким образом, упаковка компонентов в черты «шаблонов» создает полезные пространства имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...