Play を開発中です。Slick 2.0 を使用した Scala の 2.2 アプリケーションと、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
}
}
}
次に、次のものがあり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
Customer
用にこのようなクラスの別のセットがあり、その中でいくつかの機能を使用する必要があるとしましょうUserService
。
私はすべきですか:
CustomerService {
this: UserService =>
...
}
また
CustomerService {
val userService = UserModule.userService
...
}