Nun, ich versuche, Domain-driven Design-Prinzipien für meine Anwendung zu verwenden, mit einem reichen Domänenmodell, das sowohl Datenfelder als auch Geschäftslogik enthält. Ich habe viele DDD-Bücher gelesen, aber es scheint, dass ihre Domain-Modelle (genannt Entitäten) sehr einfach sind. Es wird zu einem Problem, wenn ich einen Domain-Modell mit 10 bis 15 Datenfelder haben, wie die folgende Liste:Domain Driven Design: Wie geht man mit komplexen Modellen mit vielen Datenfeldern um?
class Job extends DomainModel{
protected int id;
protected User employer;
protected string position;
protected string industry;
protected string requirements;
protected string responsibilities;
protected string benefits;
protected int vacancy;
protected Money salary;
protected DateTime datePosted;
protected DateTime dateStarting;
protected Interval duration;
protected String status;
protected float rating;
//business logic below
}
Wie Sie das Domain-Modell zu sehen, eine Menge von Datenfeldern enthält, und alle von ihnen sind wichtig und kann nicht entfernt werden. Ich weiß, dass ein gutes Rich-Domain-Modell keine Setter-Methoden enthalten sollte, sondern seine Daten an den Konstruktor übergeben und die Status mithilfe der Geschäftslogik mutieren sollte. Für das obige Domänenmodell kann ich jedoch nicht alles an den Konstruktor übergeben, da dies zu mehr als 15 Parametern in der Konstruktormethode führt. Eine Methode sollte nicht mehr als 6-7 Parameter enthalten, denkst du nicht?
Was kann ich tun, um mit einem Domänenmodell mit vielen Datenfeldern umzugehen? Soll ich es zerlegen? Wenn das so ist, wie? Oder vielleicht sollte ich einfach eine Builder-Klasse oder eine Reflektion verwenden, um ihre Eigenschaften bei der Instanziierung zu initialisieren, damit ich den Konstruktor nicht mit so vielen Argumenten belaste? Kann jemand einen Rat geben? Vielen Dank.
Ich sehe, yeah Ich denke, ich sollte beginnen, mehr Wertobjekte zu implementieren, wie das Money-Wertobjekt, das ich bereits habe. Danke für den Vorschlag, ich werde damit beginnen, Datenfelder mit kleineren Wertobjekten zu erstellen und Wertobjekte in jeder Entität zu verwenden. Ich weiß, dass geschützte Felder manchmal die Kapselung unterbrechen, also sollte ich in den meisten Fällen auf privat schalten, danke auch. Ich bin mir nicht sicher über das Domain Model vs Entity Sache, aber nach meinem Verständnis ein Domain-Modell ist eine Entität, oder dass eine Entität ist ein Domain-Modell mit einer Identität, ist das korrekt? –
@LordYggdrasill Ein Domänenmodell ist der gesamte Satz von "Dingen", die in Ihrer Domäne eine Bedeutung haben, z. Entitäten, Wertobjekte usw. Siehe zum Beispiel [dieser Artikel] (https://en.wikipedia.org/wiki/Domain_model), das Diagramm zeigt ein Beispiel-Domänenmodell, das viele Klassen enthält. – theDmi
Ich sehe, danke. Ich verstand das besser, nachdem ich einige Artikel über die Aggregatwurzel gelesen hatte. –