2
私はScalikejdbcのドキュメントから理解しているように、トランザクションをしたい場合はセッションを渡す必要があります。このように:Scalikejdbc。 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への依存関係を持っていない方法はあります:このような何か私は何をしたいのですか?
あなたは今までに解決策を見つけますか? – jen
@ jen no。私たちはスリックに切り替えました。私のメソッドシグネチャにサードパーティの依存関係を追加したくないので、Scalikejdbcとトランザクションが私を悩ませました。 Slickはやや似たような問題を抱えています(取引でそれらを組み合わせたい場合はDBIOActionを公開する必要があります)が、今は問題ではないと私は考えています。 –