Persistence Ignorance ist eine Anwendung des Single-Responsibility-Prinzips. In der Praxis bedeutet dies, dass Domain Objects ( DO ) keinen Code in Bezug auf Persistenz enthalten sollten, sondern nur Domänenlogik.
a) Ich gehe davon aus, dass der Code, der die unteren Schichten (dh die Persistenzschichten) berührt, außerhalb des Domänenmodells in anderen Klassen ( OC ) einer Geschäftslogikschicht liegt.
b) Wenn meine Annahme unter a) richtig ist , dann DO , sagen wir Customer
, nie enthält Methoden wie GetCustomers
oder GetCustomerByID
?
c) Wenn meine Annahmen unter a) und b) korrekt sind und angenommen wird , dass das Domänenobjekt Customer
für einige seiner Eigenschaften verzögertes Laden verwendet, Customer
muss sich die interne Logik irgendwann an OC wenden, um die zurückgestellten Daten abzurufen. Wenn Customer
jedoch OC kontaktiert werden muss, um verzögerte Daten zu erhalten, können wir nicht wirklich behaupten, dass Domain-Objekte keine Logik in Bezug auf Persistenz enthalten ?!
Vielen Dank
ANTWORT AUF jkohlhepp
1) Ich nehme an OrderProvider
und CustomerProvider
Klassen sind in der Business-Logik-Schicht enthalten?
2) Ich entnehme Ihrer Antwort, dass meine Annahmen unter b) korrekt sind.
3)
... Ich würde prüfen, ob ein Feld für private Bestellungen ausgefüllt ist oder ob es leer ist. Wenn es null ist ...
Aber soweit ich das order
beurteilen kann, verstoßen wir bereits gegen das PI- Prinzip , sobald der Domain-Code überprüfen muss, ob ein privates Feld ausgefüllt wurde, und wenn nicht, wenden Sie sich an OrderProvider.
quelle
Sie haben nur eine Wireup-Klasse, die die Domänenobjekte auffüllt (beispielsweise "Repository"). Sie können das verzögerte Laden oder ein beliebiges Cache-Kohärenzschema implementieren, und die Domänenobjekte sind nicht klüger. Sie trennen die Verantwortung für das Auffüllen von Domänenobjekten von Domänenobjekten.
quelle