Ich lerne Spring-MVC in meinem ersten Projekt hier.
Nach dem Lesen der Dokumentation über Transaktionen habe ich festgestellt, dass alle Beispiele Transaktionen um die Serviceobjekte / Methoden und nicht über die DAO (Datenzugriffsobjekte / -methoden) legen.
Ich habe mich gefragt warum. Ohne es besser zu wissen, würde ich mir überlegen, Transaktionen um die meisten meiner DAO-Methoden hinzuzufügen , die auf die Datenbank zugreifen (meine Vorstellung: Datenbank = Transaktionen). Ich habe noch nicht viele Service-Methoden, die sich über mehrere DAOs erstrecken (aber ich denke, das könnte ein Grund dafür sein, Services als transaktional zu markieren).
Die Frage:
Ich möchte nur wissen, was andere in dieser Situation tun. Ordnen Sie Transaktionen natürlich um die niedrigste Ebene, die Sie können (z. B. um DAOs immer, und um Dienste nur dann, wenn sie mehrere DAO in einer Weise umfassen, die Transaktionen erfordert)?
Oder konzentrieren Sie sich nur auf Transaktionen rund um Services als General Principal? Also auf einer Ebene bleiben, weil das auf lange Sicht umfassender ist?
Für mein Geld versuche ich, die Transaktion am gröbsten Punkt in der App zu platzieren, dies ist eher ein Dienst / Manager-ähnliches Objekt, das Anrufe zu einem oder mehreren feineren Dao-Anrufen koordiniert.
Theoretisch könnten Sie Transaktionen überall zwischen Services und Daos platzieren, vorausgesetzt, sie sind so definiert, dass sie bei Bedarf einer bestehenden Transaktion beitreten. In der Praxis habe ich festgestellt, dass dies weniger nützlich ist, da es unnötig ist und Sie nur ärgern wird, wenn Sie versuchen, den Code zu debuggen.
Dies geschieht, damit die Daten, die Sie aus der DataSource ausgewählt / abgefragt haben, während der Verarbeitung der Daten gültig bleiben.
In anderen Fällen (Transaktionen auf DAO setzen) können die Daten geändert werden, während Sie mit den Daten arbeiten und möglicherweise falsche Ergebnisse erhalten.
Die anderen Antworten sind richtig, aber um den Antworten Farbe zu verleihen: Die Transaktion auf der Service-Ebene sollte ein atomares Stück Geschäftslogik einkapseln. Da diese Geschäftslogik ohne Interferenz von anderer Geschäftslogik allein stehen sollte, müssen sich die Transaktionen in der Service-Schicht befinden.
Tags und Links java spring-mvc transactions