Ich habe eine 3-Tier-Architektur, die in etwa wie folgt aussieht:Transaktionsgrenzen in einer N-Tier-Architektur
Client -> Business -> Daten
Wo sollen Transaktionen starten ideal?
Eine Denkrichtung besagt, dass Transaktionen nur am Anfang der Datenschicht beginnen sollten. Die Business-Schicht manipuliert nur Business-Objekte mit Geschäftslogik und weiß nie über Transaktionen. Das Unternehmen macht alle seine Arbeit, um Objekte zu manipulieren, und übergibt sie dann an die Datenschicht, die persistiert werden soll. Es ist eine etwas REST-orientierte Philosophie, die auf die unteren Schichten angewendet wird.
Eine andere Denkrichtung besagt, dass Transaktionen an der Spitze der Business-Schicht beginnen sollten. Die Business-Schicht definiert logische Arbeitseinheiten, nicht die Datenschicht, da eine logische Arbeitseinheit manchmal Geschäftslogik und nicht nur Datenlogik enthält.
Ich mag die Idee, Transaktionsprobleme so gering wie möglich zu machen. Aber ich finde auch, dass es zusätzliche Anstrengungen und Design-Herausforderungen erfordern kann, um zu versuchen, die Geschäftslogik außerhalb der Datenschicht zu halten, es sei denn, es handelt sich nur um CRUD-Operationen. Wenn Sie RESTful-Entwurfsmuster mit einem Vorschlaghammer anwenden, können Sie es so einrichten, dass Ihre Anwendungen nur sehr wenige Nicht-CRUD-Operationen haben.
Es gibt sogar eine dritte Denkrichtung, die besagt, dass der Client Transaktionen starten kann, damit er mehrere Geschäftsvorgänge bei Bedarf kombinieren kann. Aber jetzt definiert der Kunde die Arbeitseinheit? Ist das nicht ein Geschäftsanliegen?
Eine vierte Schule der Gedanken besagt, dass meine Kunden nur SOA-Komponenten sein können, die an einer XA-Transaktion teilnehmen können, die sogar außerhalb des Clients gestartet wurde !!
Unsere Entwickler möchten einige Standards Beton mehr als nur „Transaktionen starten, wo immer Sie Lust haben“
Hat jemand irgendwelche Meinungen oder Anregungen zu diesem Thema?
Danke!
FWIW, Java EE startet Transaktionen mit den Session Beans, was effektiv der Business-Layer ist. (Aber Java EE trifft häufig Designentscheidungen, die die Integration auf Kosten der Entkopplung begünstigen). – Beaker