Attualmente ho un set di oggetti di accesso ai dati denominato con la convenzione *SlickRepo
. Così, per esempio, UserSlickRepo
, DistributionSlickRepo
, ContentSlickRepo
, ecc ...Metodi Slick Repo che partecipano tutti alla Transazione di un servizio
Ciascuno di questi metodi Repos hanno su di loro che, in fondo seguono questa convenzione:
trait SomethingRepoImpl extends SomethingRepo {
val somethingRepo: SomethingRepo = new SomethingRepoImpl
class SomethingRepoImpl extends SomethingRepo with MySlickDatastore {
def getSomething(id: UUID): Either[SomethingNotFoundError, Something] = {
getDatabase withDynSession {
// Slick stuff
}
}
def createSomething .....
}
}
momento fino ad un livello di servizio, abbiamo cuocere in questo classe di pronti contro termine e noi abbiamo i metodi che assomigliano a questo:
trait SomethingServiceImpl extends SomethingService {
dep: SomethingRepo with SomethingElseRepo =>
val somethingService = new SomethingServiceImpl
class SomethingServiceImpl extends SomethingService {
def createSomethingGood(): Either[SomeError, (Something, SomethingElse)] = {
(dep.somethingRepo.createSomething, dep.somethingElseRepo.createSomethingElse)
}
}
}
ora il desiderio di avere createSomethingGood
effettivamente eseguito i due metodi di pronti contro termine all'interno di una transazione. Dal momento che tutta la roba di Slick è bloccata nei metodi di replica specifici di Slick, qual è il modo migliore per farlo? Non sono contrario ad avere il codice specifico di Slick nelle mie classi *ServiceImpl
(voglio dire strano, ma ok), tuttavia ciò significa che devo cambiare le mie classi Repo per rimuovere il codice di tipo getDatabase withDynSession
tutti insieme e invece passare una sessione da il livello di servizio? Per me, questo sembra ... sbagliato.
È possibile avere un servizio transazionale con sessione implicita come [suggerito qui] (http://stackoverflow.com/questions/28398482/how-we-use-slick-transaction-on-service-layer-for-making- sistema a-transazione). Nota a margine: sei sicuro che i Repos siano in realtà Repository, non oggetti DAO? – MirMasej