, UserServiceComponent UserService:
trait UserService extends RepositoryDelegator[User] {
def getPublicProfile(id: String): Either[Error, User]
}
trait UserServiceComponent {
val userService: UserService
}
trait DefaultUserServiceComponent extends UserServiceComponent { self: UserRepositoryComponent =>
protected class DefaultUserService extends UserService {
def getPublicProfile(id: String): Either[Error, User] = userRepository.getPublicProfile(id)
}
val userService: UserService = new DefaultUserService
}
trait AlternativeUserServiceComponent extends UserServiceComponent {
protected class AlternativeUserService extends UserService {
def getPublicProfile(id: String): Either[Error, User] = call webservice here for exemple...
}
val userService: UserService = new AlternativeUserService
}
, . .
, UserRepositoryComponent, (, AlternativeUserService).
, , , - DefaultUserServiceComponent AlternativeUserServiceComponent.
, userService. , 3 , :
- defaultUserService
DefaultUserService - alternativeUserService
AlternativeUserService - mainUserService
UserService ( , " " ).
:
trait UserService extends RepositoryDelegator[User] {
def getPublicProfile(id: String): Either[Error, User]
}
trait MainUserServiceComponent {
val mainUserService: UserService
}
trait DefaultUserServiceComponent { self: UserRepositoryComponent =>
protected class DefaultUserService extends UserService {
def getPublicProfile(id: String): Either[Error, User] = userRepository.getPublicProfile(id)
}
val defaultUserService: UserService = new DefaultUserService
}
trait AlternativeUserServiceComponent {
protected class AlternativeUserService extends UserService {
def getPublicProfile(id: String): Either[Error, User] = ???
}
val alternativeUserService: UserService = new AlternativeUserService
}
:
object MyApp
extends MainUserServiceComponent
with DefaultUserServiceComponent
with AlternativeUserServiceComponent
with MyUserRepositoryComponent
{
val mainUserService = alternativeUserService
}
, DefaultUserService, DefaultUserServiceComponent ( AlternativeUserService AlternativeUserServiceComponent), , UserService MainUserServiceComponent . " ", mainUserService ( DefaultUserService.