Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- case class User()
- case class Book()
- trait UserRepository {
- def getResource(): User
- }
- trait UserRepositoryComponent {
- def userRepository: UserRepository
- }
- trait BookRepository {
- def getResource(): Book
- }
- trait BookRepositoryComponent {
- def bookRepository: BookRepository
- }
- trait DbUserRepositoryComponent extends UserRepositoryComponent {
- val db: DB
- override def userRepository = new UserRepository {
- overrride def getResource(): User = {
- db.run()
- User()
- }
- }
- }
- trait DbBookRepositoryComponent extends BookRepositoryComponent {
- val db: DB
- override val bookRepository = new BookRepository {
- overrride def getResource(): Book = {
- db.run()
- Book()
- }
- }
- }
- // trait Service extends UserRepository with BookRepository { => Service IS A UserRepository
- trait Service {
- self: UserRepositoryComponent with BookRepositoryComponent => // UserService REQUIRES some Impl of UserRepository
- def foo(): Unit = {
- userRepository.getResource()
- bookRepository.getResource()
- }
- }
- class ServiceImplA extends DbUserRepository with DbBookRepository
- class ServiceImplB extends MockUserRepository with MockBookRepository
- class ServiceImplC extends FileUserRepository with FileBookRepository
- class ServiceImplD extends DbUserRepository with FileBookRepository
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement