Sto sviluppando un gioco! 2.2 Applicazione in Scala con Slick 2.0 e ora sto affrontando l'aspetto dell'accesso ai dati, cercando di usare il Pattern Cake. Sembra promettente, ma mi sento davvero come se avessi bisogno di scrivere un sacco di classi/tratti/oggetti solo per ottenere qualcosa di veramente semplice. Quindi potrei usare un po 'di luce su questo.Scala Slick Cake Pattern: oltre 9000 classi?
Prendendo un esempio molto semplice con un concetto User
, il modo in cui ho capito è che dovrebbe avere:
case class User(...) //model
class Users extends Table[User]... //Slick Table
object users extends TableQuery[Users] { //Slick Query
//custom queries
}
Finora è assolutamente ragionevole. Ora aggiungere una "torta 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
}
}
}
Poi abbiamo un UserService
:
trait UserService {
this: UserRepository =>
val userService: UserService
class UserServiceImpl { //
def findByName(name: String) = {
userRepo.findByName(name)
}
}
}
Ora mischiamo tutto questo in un oggetto:
object UserModule extends UserService with UserRepository {
val userRepo = new UserRepositoryImpl
val userService = new UserServiceImpl
}
UserRepository
è davvero utile? Potrei scriverefindByName
come una query personalizzata nell'oggetto slickUsers
.Diciamo che ho un altro set di classi come questo per
Customer
, e ho bisogno di utilizzare alcune funzioniUserService
in esso.
devo fare:
CustomerService {
this: UserService =>
...
}
o
CustomerService {
val userService = UserModule.userService
...
}
Da dove arriva 9000? – Blankman
@Blankman http://knowyourmeme.com/memes/its-over-9000 – user1498572