Seb*_*ber 3 scala cake-pattern
这个问题可以帮助您了解我的需求. 蛋糕模式:每个实现一个组件,或每个特性一个组件?
我有一个使用多个UserService实现的Scala应用程序,它将由组件(s?)提供.
我想知道在另一个组件中是否有一种方法可以"扫描"应用程序,以便我可以检索一组提供实现特征UserService的对象的所有组件?这样我可以迭代我的蛋糕构建应用程序提供的所有UserService接口?
我想我可以有一个组件根据其依赖关系构建一个UserService列表,但是有没有可能让这个组件构建列表而没有任何硬编码依赖?
您只需拥有一个UserService实例列表UserServiceComponent,并UserService在此列表中拥有基本注册.
trait UserServiceComponent {
private val _userServices = collection.mutable.Buffer[UserService]()
def userServices: Seq[UserService] = _userServices.synchronized {
_userServices.toList // defensive copy
}
private def registerUserService( service: UserService ) = _userServices.synchronized {
_userServices += service
}
trait UserService {
registerUserService( this )
def getPublicProfile(id: String): Either[Error, User]
}
val mainUserService: UserService
}
trait DefaultUserServiceComponent extends UserServiceComponent { self: UserRepositoryComponent =>
protected class DefaultUserService extends UserService {
// NOTE: no need to register the service, this is handled by the base class
def getPublicProfile(id: String): Either[Error, User] = userRepository.getPublicProfile(id)
}
val mainUserService: UserService = new DefaultUserService
}
Run Code Online (Sandbox Code Playgroud)