Вам не нужно , чтобы обернуть свои классы реализации, например, вы можете написать что-то вроде этого:
trait UserRepository { ... }
trait UserService { this: UserRepository => ... }
Но для создания ваших компонентов потребуется создать один объект, содержащий всеваши компоненты сразу:
new UserRepositoryImpl with UserServiceImpl
Итак, методы из UserRepository
и UserService
будут смешаны в одном экземпляре, что не обязательно то, что вы хотите (и что может вызвать проблемы, если ваши компоненты определяютметоды с тем же именем).
Таким образом, упаковка компонентов в черты «шаблонов» создает полезные пространства имен.