7 Stimmen

Lazy Loading von DTO-Feldern in Spring

Ich habe ein Projekt, das Spring verwendet und in ein paar Dutzend DAOs und zugehörige DTOs unterteilt ist. Ich verwende JdbcTemplate, aber nicht viel mehr, da es genau die Abstraktionsebene ist, mit der ich zufrieden bin.

Ich führe derzeit Lazy Loading auf meine DTOs, indem Sie einige ziemlich haarigen Code in ihre Getter.

Die grundlegende Logik ist: 1. Wenn das Feld nicht null ist, wird der Wert zurückgegeben und das Programm beendet. 2. Kontaktaufnahme mit dem entsprechenden DAO und Abruf der relevanten DTOs 3. Speichern Sie sie bis zum nächsten Mal.

Es funktioniert gut, außer dass meine bescheidenen DTOs mit einer ganzen Reihe von DAOs gekoppelt sind und nicht so POJOey sind.

Ein weiterer Codegeruch tritt auf, wenn ich die Logik im DAO platziere, da es sowohl CRUD für seine DTOs als auch Lazy Loading behandeln würde, und so wie ich es verstehe, sollten Objekte eine einzige Verantwortung haben.

Ich hoffe, dass es einen relativ einfachen Spring-Ansatz gibt, den ich verwenden kann, um ein Lazy Loader-Objekt zwischen den DAOs und den DTOs zu injizieren, um dies zu erreichen, aber jede andere Lösung würde für mich arbeiten.

Irgendwelche Ideen?

4voto

Jim Barrows Punkte 3614

Es ist einfacher, DAOs um DAOs zu wickeln... es hängt davon ab, wie viel von dem Modell Sie rüberbringen wollen. DTOs werden in der Regel nicht verwendet, um eine eins zu viele über mit ihnen zu bringen, als zwei oder mehr separate Datenbank/Dao Aufrufe. In diesem Fall wollen Sie wirklich ein ORM. Da Ihre Suche nach einer Dao-Antwort......

Es gibt nichts, was Sie daran hindert, DAOs miteinander zu verknüpfen, um ein einziges DTO zu erhalten. Es ist einfacher, als ein DTO mit einem DAO zu verbinden. Es handelt sich nicht wirklich um eine Dienstschicht, sondern nur um Bausteine von DAOs. Sie könnten also ein PersonDao und ein TelephoneNumberDao haben. Eine Person kann mehr als eine Telefonnummer haben, so dass Sie auch PersonModelDAo haben könnten, das PersonDao und TelephoneNumberDao unter der Haube verwendet, um seine Arbeit zu tun.

Alternativ können Sie das ganze Problem vermeiden und nicht versuchen, das 1-N zwischen Person und Telefonnummer auf DTO-Ebene abzubilden. Lassen Sie Ihre Benutzeroberfläche einfach die richtigen Aufrufe an die richtigen DAOs machen. Mir gefällt das eigentlich besser, wenn ich DTOs verwende.

3voto

cliff.meyers Punkte 17470

Es ist üblich, eine Serviceschicht einzuführen, die Ihre DAOs umhüllt und sich um derartige Belange kümmert. Wenn Sie befürchten, dass Sie zu viel Boilerplate-Code in Ihre DTOs einbauen, um Lazy Loading zu handhaben, könnte die Verwendung von AOP vielleicht eine Möglichkeit sein, dies zu erreichen. Vielleicht sollten Sie sich mit AspectJ und Weaving entweder zur Kompilier- oder zur Ladezeit beschäftigen. Da Sie den Byte-Code direkt ändern würden, müssten Sie sich nicht um den Performance-Overhead von proxy-basiertem AOP kümmern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X