2016-03-29 7 views
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への依存関係を持っていない方法はあります:このような何か私は何をしたいのですか?

+0

あなたは今までに解決策を見つけますか? – jen

+0

@ jen no。私たちはスリックに切り替えました。私のメソッドシグネチャにサードパーティの依存関係を追加したくないので、Scalikejdbcとトランザクションが私を悩ませました。 Slickはやや似たような問題を抱えています(取引でそれらを組み合わせたい場合はDBIOActionを公開する必要があります)が、今は問題ではないと私は考えています。 –

答えて

関連する問題