2016-03-29 13 views
2

Wie ich aus Docs von Scalikejdbc verstehe, wenn ich eine Transaktion haben möchte, muss ich eine Sitzung übergeben. Gefällt mir:Scalikejdbc. Verwalten Sie Transaktionen ohne explizite Abhängigkeit von Scalikejdbc und Sitzung

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""" 
    } 
    } 

Und dieses Ding macht mich explizit abhängig von Scalikejdbc. Ich möchte keine Abhängigkeit von Scalike in meinen Domäneneigenschaften haben. Was ich will, ist so etwas wie diese:

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""" 
    } 
    } 

Gibt es eine Möglichkeit Transaktionen haben und Abhängigkeiten nicht auf Sitzungen und scalike in der Klasse Signatur?

+0

Haben Sie jemals eine Lösung finden? – jen

+0

@jen Nr. Wir sind zu Slick gewechselt. Scalikejdbc und seine Transaktionen störten mich, weil ich meinen Methodensignaturen keine Abhängigkeit von Dritten hinzufügen wollte. Slick hat ähnliche Probleme (wir müssen DBIOAction verfügbar machen, wenn wir sie in der Transaktion kombinieren wollen), aber jetzt denke ich auch, dass dies kein Problem ist. –

Antwort