Ich möchte eine Anwendung wie E-Commerce schreiben.
Und Sie wissen, dass Produkte in ähnlichen Anwendungen unterschiedliche Eigenschaften und Merkmale haben können. Um eine solche Gelegenheit zu simulieren, habe ich die folgenden Domänenmodellentitäten erstellt:
Kategorie - dies ist so etwas wie "Elektronik> Computer", dh Arten von Produkten. СKategorien enthalten eine Liste von Eigenschaften (Liste <Eigenschaft>).
Eigenschaftsunabhängige Entität, die den Namen, die Maßeinheiten und den Datentyp enthält. Zum Beispiel "Name", "Gewicht", "Bildschirmgröße". Dieselbe Eigenschaft kann unterschiedliche Produkte haben.
Produkt - enthält nur den Namen und eine Liste der Werte für Eigenschaften. Wert ist ein Objekt, das nur das Wertfeld und die Feld-ID der Eigenschaft enthält.
Ich habe ursprünglich beschlossen, die Kategorie in diesem Schema wie ein einzelnes Aggregat zu gestalten, da ich beispielsweise beim Hinzufügen eines neuen Produkts alle Daten zur aktuellen Kategorie kennen muss, einschließlich der Eigenschaften zur aktuellen Kategorie ( category.AddNewProduct (Produkt) ). Aber was soll ich tun, wenn ich nur eine neue Eigenschaft hinzufügen muss, die keiner Kategorie angehört? Zum Beispiel kann ich diese Kategorie nicht ausführen. AddNewProperty (Eigenschaft), da eindeutig angegeben ist, dass wir die Eigenschaft einer bestimmten Kategorie hinzufügen.
Ok, im nächsten Schritt habe ich eine separate Eigenschaft in ein separates Aggregat umgewandelt, aber dann wird es eine Liste mit einfachen Entitäten sein.
Natürlich kann ich so etwas wie PropertyAggregate erstellen, um die Liste der Eigenschaften und Geschäftsregeln beizubehalten, aber wenn ich ein Produkt hinzufüge, muss die gesamte Liste der zu dieser Kategorie gehörenden Eigenschaften in der Kategorie enthalten sein, um die Invarianten zu überprüfen. Mir ist aber auch bewusst, dass es eine schlechte Praxis ist, die Links innerhalb des Aggregats auf anderen Aggregaten zu belassen.
Welche Möglichkeiten gibt es, um diesen Business Case zu entwerfen?