我正在使用Scala和Slick 2.0开发Play! 2.2应用程序,并且现在正在处理数据访问方面,尝试使用Cake Pattern。 看起来很有前途,但实际上我觉得我需要编写大量的类/特征/对象才能实现真正简单的东西。因此,我需要一些指导。
以一个非常简单的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
}
}
}
接下来我们有一个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
真的有用吗?我可以在Users
光滑对象中编写findByName
作为自定义查询。假设我有另一组像这样的类用于
Customer
,并且我需要在其中使用一些UserService
功能。
我应该怎么做:
CustomerService {
this: UserService =>
...
}
或者CustomerService {
val userService = UserModule.userService
...
}