Dependency-Injektion mit NHibernate-Objekten

8

Ich frage mich, wie ich NHibernate dazu bringen kann, Abhängigkeiten von meinen POCO-Domänenobjekten aufzulösen.

Ich habe herausgefunden, dass Methoden wie CalculateOrderTax im Domain-Objekt sein sollten, weil sie domänenspezifische Geschäftsregeln kodieren. Aber wenn ich zwei davon habe, verletze ich SRP.

Es wäre kein Problem, diese Methoden in Strategy-Klassen zu extrahieren, aber ich frage mich, wie ich NHibernate dazu bringen kann, diese zu laden.

Es scheint keine gute Lösung zu sein, eine Liste von Objekten im Repository durchzulaufen, um eine abhängige Dependency-Injektion zu erhalten / setzen, bevor das Objekt an die höheren Ebenen übergeben wird.

Ich benutze auch Castle Windsor für meine Depency-Injektion.

    
Tigraine 04.12.2008, 12:41
quelle

3 Antworten

8

Ich habe Abfangjäger für ähnliche Aufgaben benutzt:

Ein Interceptor, der geladene Entitäten modifiziert:

%Vor%

Ordnen Sie es einer Sitzung zu:

%Vor%

Ich habe auch irgendwo gelesen, dass es in der kommenden Version 2.1 bessere Unterstützung für die benutzerdefinierte Konstruktorinjektion geben würde, aber ich kann die Referenz momentan nicht finden.

    
Cristian Libardo 04.12.2008, 15:36
quelle
1

Da niemand in der Lage ist, Ihre Frage im Moment zu beantworten, dachte ich, ich würde vorschlagen, Ihren Code neu zu strukturieren, um die Notwendigkeit zu beseitigen, dass der Orden seine eigene Steuer berechnet.

Sie könnten es an einen OrderTaxService delegieren, der ein Order-Objekt übernimmt und ein OrderValue-Objekt oder etwas in diesen Zeilen zurückgibt.

Dadurch bleibt die Logik in Ihrer Domäne erhalten, Sie müssen sie jedoch nicht mehr an Ihre Auftragsobjekte anhängen.

    
Garry Shutler 04.12.2008 14:29
quelle
1

Ich stimme Garry zu, dass Sie Dienstabhängigkeiten so weit wie möglich von Ihren Domänenobjekten entfernen sollten. Manchmal macht es Sinn, zum Beispiel Verschlüsselung / Entschlüsselung. In diesem Fall können Sie es mithilfe von interception oder IUserType in der Infrastruktur verbergen. Ich denke, Letzteres ist günstig, wenn Sie es verwenden können. Dieser Artikel zeigt detailliert, wie es geht. Ich mache das und es funktioniert ganz gut.

    
Tim Scott 04.12.2008 17:49
quelle