Я развиваю игру! 2.2 в Scala с Slick 2.0, и теперь я занимаюсь аспектом доступа к данным, пытаясь использовать шаблон Cake. Это кажется многообещающим, но я действительно чувствую, что мне нужно написать огромную группу классов/черт/объектов, чтобы достичь чего-то очень простого. Поэтому я мог бы использовать некоторый свет на этом.
Принимая очень простой пример с концепцией User
, я понимаю, что мы должны иметь:
case class User(...) //model
class Users extends Table[User]... //Slick Table
object users extends TableQuery[Users] { //Slick Query
//custom queries
}
До сих пор это вполне разумно. Теперь добавим "Cake Patternable" UserRepository
:
trait UserRepository {
val userRepo: UserRepository
class UserRepositoryImpl {
//Here I can do some stuff with slick
def findByName(name: String) = {
users.withFilter(_.name === name).list
}
}
}
Тогда имеем a UserService
:
trait UserService {
this: UserRepository =>
val userService: UserService
class UserServiceImpl { //
def findByName(name: String) = {
userRepo.findByName(name)
}
}
}
Теперь мы смешаем все это в объекте:
object UserModule extends UserService with UserRepository {
val userRepo = new UserRepositoryImpl
val userService = new UserServiceImpl
}
-
Действительно ли
UserRepository
полезен? Я мог написатьfindByName
как пользовательский запрос вUsers
slick-объекте. -
Скажем, у меня есть еще один набор таких классов для
Customer
, и мне нужно использовать в нем некоторыеUserService
.
Должен ли я делать:
CustomerService {
this: UserService =>
...
}
или
CustomerService {
val userService = UserModule.userService
...
}