Scalikejdbc のドキュメントからわかるように、トランザクションが必要な場合はセッションを渡す必要があります。このような:
class FooBarService {
val fooDao = new FooDao
val barDao = new BarDao
def fooBar(): Unit = {
DB localTx { session =>
fooDao.foo(new Foo())
barDao.bar(new Bar())
}
}
}
class FooDao {
def foo(foo: Foo)(implicit session: DBSession): Unit = {
sql"""bla bla bla"""
}
}
class BarDao {
def bar(bar: Bar)(implicit session: DBSession): Unit = {
sql"""bla bla bla"""
}
}
そのため、私は明示的に Scalikejdbc に依存しています。ドメイン特性で Scalike に依存したくありません。私が欲しいのは次のようなものです:
class FooBarService {
val fooDao = new FooDao
val barDao = new BarDao
def fooBar(): Unit = {
// My wrapper which abstract and is not dependent on Scalike or other library
MyWrapper.withinTransaction {
fooDao.foo(new Foo())
barDao.bar(new Bar())
}
// or at least not to pass session to daos
DB withinTransaction {
fooDao.foo(new Foo())
barDao.bar(new Bar())
}
}
}
class FooDao {
def foo(foo: Foo): Unit = {
sql"""bla bla bla"""
}
}
class BarDao {
def bar(bar: Bar): Unit = {
sql"""bla bla bla"""
}
}
トランザクションを持ち、セッションに依存せず、クラス署名で scalike する方法はありますか?