11

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 
}
  1. 本当にUserRepository便利?洗練されたオブジェクトfindByNameでカスタムクエリとして書くことができました。Users

  2. Customer用にこのようなクラスの別のセットがあり、その中でいくつかの機能を使用する必要があるとしましょうUserService

私はすべきですか:

CustomerService {
this: UserService =>
...
}

また

CustomerService {
val userService = UserModule.userService
...
}
4

2 に答える 2