Slick Repo Methoden alle an einem Service-Transaktion teilnehmen

8

Ich habe derzeit eine Reihe von Datenzugriffsobjekten mit der Konvention *SlickRepo . Also zum Beispiel, UserSlickRepo , DistributionSlickRepo , ContentSlickRepo , etc ...

Jedes dieser Repos hat Methoden, die grundsätzlich dieser Konvention folgen:

%Vor%

Jetzt auf einer Service-Ebene backen wir in dieser Repo-Klasse und wir haben Methoden, die wie folgt aussehen:

%Vor%

Wir möchten nun, dass createSomethingGood tatsächlich die zwei Repomethoden innerhalb einer Transaktion ausführt. Da alle Slick-Sachen in den Slick-spezifischen Repo-Methoden eingeschlossen sind, was ist der beste Weg, dies zu tun? Ich bin nicht gegen slick-spezifischen Code in meinen *ServiceImpl -Klassen (ich meine seltsam, aber ok), aber das bedeutet, dass ich meine Repo-Klassen ändern müssen, um den getDatabase withDynSession -Typ-Code alle zusammen zu entfernen und stattdessen bestehen in einer Sitzung von der Service-Schicht? Das scheint mir einfach falsch zu sein.

    
ThaDon 22.06.2015, 18:35
quelle

2 Antworten

4

Aus meiner Sicht ist der richtige Ansatz, createSomething und createSomethingElse zu einer *Repo ( SomethingRepo oder SomethingElseRepo ) Transaktionsart ( withTransaction {...} ) hinzuzufügen. Es ist keine schöne Lösung, aber so einfach wie möglich für mich und weil diese Entitäten logisch verbunden sind (was wir aus diesem Code sehen können (dep.somethingRepo.createSomething, dep.somethingElseRepo.createSomethingElse) ) Ich denke, es ist kein großer Verstoß, den Vorgang auf 2 Entitäten in einer DAO-Klasse zu mischen. Bitte, repariere mich, wenn ich falsch liege.

    
ka4eli 25.07.2015 20:30
quelle
0

Vielleicht gibt es einen anderen Weg. Ich habe es selbst nicht versucht, aber die Idee ist, dass Sie einen Session-Wrapper haben könnten, der tatsächlich an den Repo übergeben wird.

Dieser Wrapper müsste auf der Service-Ebene erstellt werden, aber Sie können die spezifische Implementierung auf einem Companion-Objekt abstrahieren, so dass die Service-Schicht nicht mit Slick, sondern eher mit

zurechtkommt %Vor%

Ich hoffe, das hilft, ich werde mehr zur Antwort hinzufügen, wenn ich die Änderung bekomme, um es selbst zu versuchen.

    
Adrian Lopez 23.07.2015 07:53
quelle

Tags und Links