Frage

Ich habe versucht, meine DAL von meinem Business Layer zu trennen, und dabei habe ich beschlossen, jeden Active Ansatz zu vermeiden und für einen DataMapper Ansatz gehen. Mit anderen Worten, nehmen Sie meine Domain-Objekte würden nicht kümmern sich persistierender. Dabei scheinen ich auf dem „anämischen Domänenmodell“ anti-Muster vordringenden werden. Zum Beispiel ist eine der Entitäten in meinem Programm ist eine Organisation.

Eine Organisation wird als so etwas wie dies dargestellt:

class Organization {
    private $orgId;
    private $orgName;

    // getters and setters
}

Also im Grunde diese Organisation macht nichts anderes, als Akt als „Tasche“ (wie Martin Fowler sagt) für einige Daten. In der PHP-Welt ist es nichts anderes als eine bessere Array. Es gibt Null Verhalten mit ihm verbunden ist.

Und Verhalten im Programm, ich habe in „Service-Level“ Klasse wie ein OrganizationService kleben, die meist als Vermittler zwischen diesen Objekten und dem DAL dient.

Anders als mögliche Skalierung Probleme mit PHP (ich aus anderen Gründen zu tun haben, warum ich darauf bestehen, „Absacken“ meine Daten in diesen Objekten), ist dieser Ansatz völlig aus?

Wie gehen Sie mit Ihrem Domain-Modelle in diesen Situationen? Vielleicht eine Organisation ist nicht Teil meiner Domain in erster Linie?

War es hilfreich?

Lösung

Nun, es scheint, wie dies am Anfang, aber wenn Sie Ihren Code Refactoring werden, werden Sie zu einem gewissen Verhalten für Ihre Organisation Klasse bekommen ...

ein Beispiel, das ich jetzt vielleicht denken, wenn Sie Menschen (Mitarbeiter) haben, können Sie sie mit der Organisation zu verknüpfen. so könnten Sie eine Methode AssociateEmployee(User employee) haben, das seinen Platz in Ihrer Organisation Klasse finden könnte.

Oder Sie Standort des Unternehmens ändern, statt Parameter wie Adresse, Stadt, Staat in drei Stufen einstellen, könnten Sie ChangeLocation(Street, City, State) Methode hinzufügen ..

Gehen Sie einfach Schritt für Schritt, wenn Sie in Ihnen BL / Service-Layer einige Code stoßen, wie es scheint, in die Domäne gehören soll, verschieben Sie sie in die Domäne nach unten. Wenn Sie Fowler lesen, werden Sie es sehr schnell bekommen, wenn Sie es in Ihrem Code zu sehen.

Andere Tipps

Es könnte jetzt anämisch sein?

Zum Beispiel einmal Zeit, die ich entwickle eine Tagungs- / Konferenzanmeldeseite. Es begann mit nur einer Sitzung.

Es gibt immer noch ein Treffen Klasse war und nur eine Instanz, aber das nächste Jahr haben wir die Konferenz stattfinden, wurde es erweitert und neue Eigenschaften wurden hinzugefügt (zwei Back-to-Back-Sitzungen zu halten), so klar war es einfach nicht voll noch entwickelt, wie wir dann Gruppen hinzugefügt treffen, die mehrere Sitzungen enthalten könnten.

Also ich denke, es ist wichtig, im Auge zu behalten, dass der Wandel Domains im Laufe der Zeit und Ihr Modell kann Refactoring am Ende wird, also auch wenn Sie vielleicht denken, es ist anämisch, es könnte nur eine wenig zu vorausschauende (wie Ihre Organisation Klasse beginnen einige Einstellungen, Regeln oder Präferenzen oder etwas) zu erhalten.

Sie könnten auch bedenken, dass, wenn Sie nicht viel von Geschäftsregeln haben, oder die Domain nur ist nicht so komplex, dass DDD für Sie zu viel Aufwand sein kann. DDD ist eine ausgezeichnete Lösung für große, komplizierte Domänen, ist aber eine Menge Aufwand und Komplexität, wenn Sie einfach Daten tun Daten in, out. DDD härter ist und von Natur aus Komplexität fügt zu gestalten, so dass es zu rechtfertigen, die Komplexität des Problems Domäne sollte, dass aufwiegen.

Das ist alles, was ich möchte hinzufügen, zappan und epitka.

Ihr Unternehmen ist nicht anämisch, weil Sie eine reposnsibility einnehmen, die nicht dort beginnen sollte. Persistierende und Abrufen von Entitäten ist reponsibility von Repositorys. Wirklich Ihr Verhalten soll nicht in einem Service-Layer in Ihren Einheiten sein. Aber zu erklären, was geht, wo ist weit über einfache Antwort. DDD von Eric Evans ist ein guter Ausgangspunkt.

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