Frage

Ich baue eine Feder Anwendung zum ersten Mal. Ich laufe in eine Menge Probleme mit Parallelität, und ich vermute, dass es etwas falsch mit der Art, wie ich das Backend bin zu verwalten. Der einzige Unterschied, den ich zwischen meinem Backend-Code sehen und Beispiele, die ich gesehen habe, sind Manager-Klassen.

In meinem Code habe ich mein Modell (verwaltet von Hibernate) und meinen DAOs oben auf, dass CRUD zu tun / Suche / etc auf den Modellen. Im Beispielcode ich ausgesehen haben, verwenden sie nie direkt die DAO. Stattdessen verwenden sie Manager-Klassen, die die DAOs indirekt nennen. Mir scheint dies wie sinnlos Code-Duplizierung.

Was sind diese Manager-Klassen für? Ich habe gelesen, dass sie in meinem Code wrap „Transaktionen“, aber warum sollte ich das wollen?

War es hilfreich?

Lösung

Die Transaktionen werden verwendet, um Make-Updates "transaktionale".

Beispiel) Ein Benutzer klickt auf eine Webseite, dass führt zu 13 Datensätze in der Datenbank aktualisiert. Eine Transaktion würde sicherstellen, entweder 0 oder 13 des Updates zu gehen, wäre ein Fehler, der es alle Rollback machen.

Manager haben mit den Dingen leichter zu tun zu tun. Sie werden nicht auf magische Weise Ihren Code THREAD machen. direkt ein DAO ist kein Thread-Sicherheit Fehler in und von sich selbst.

Allerdings empfehle ich Ihnen die Logik in Ihrer DAO begrenzen, und setzen so viel Logik, wie Sie in den Business-Schichten. Siehe Best Practice für DAO-Muster?

Wenn Sie vielleicht ein kleines Beispiel für den Code veröffentlichen, die nicht funktionieren gut mit mehreren Threads, können wir einige Ideen vorschlagen ... aber weder Transaktionen noch Manager werden allein Ihr Problem beheben.

Andere Tipps

Viele Anwendungen haben nicht trivial Anforderungen und die Business-Logik beinhaltet häufig Zugriff auf mehrere Ressourcen (zB mehrere DAOs), Koordination dieser Zugriffe und Kontrolle der Transaktion über diese Zugriffe (wenn Sie DAO1 und DAO2 zugreifen zu können, wollen Commit oder Rollback die Änderungen als eine unteilbare Einheit der Arbeit).

Es ist also typisch einzukapseln und verstecken diese Komplexität in gewidmet Dienste Komponenten aussetzt Geschäftsverhalten in einem grobkörnig Weise an die Kunden.

Und das ist genau das, was die Manager Sie sich beziehen, tun, sie bilden den Service Layer .

  

Ein Service Layer definiert eine Anwendung Grenze [Cockburn Plop] und seine Menge der verfügbaren Operationen aus der Sicht der Client-Schichten Schnittstelle. Sie kapselt die Geschäftslogik der Anwendung, Transaktionen steuern und Antworten bei der Durchführung ihrer Operationen zu koordinieren.

DAOs sollte keine eigenen Geschäfte, weil sie nicht wissen, ob oder nicht, sie sind nur ein Teil einer größeren Transaktion.

Das Service-Tier ist, wo Transaktionen gehören. Sie sind falsch zu sagen, dass sie eine sind „sinnlos Code-Duplizierung.“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top