Ich arbeite seit ein paar Monaten mit DDD zusammen und bin auf einige Dinge gestoßen, bei denen ich mir nicht sicher bin.Welches dieser Beispiele steht für die korrekte Verwendung von DDD?
Nehmen Sie das vereinfachte Beispiel des Hinzufügens eines zu einem Order
Objekt. Von unserem Controller würden wir eine int
über die UI übergeben, die eine Product
in der Datenbank darstellt. Welches der folgenden zwei Beispiele ist korrekt (lassen Sie mich wissen, wenn beide falsch liegen)?
Beispiel Eins:
public class OrderController
{
// Injected Repositories
private readonly IProductRepository _productRepository;
// Called by UI
public void AddProduct(int productId)
{
Order order = ...; // Persisted Order
Product product = _productRepository.GetProduct(productId);
order.AddProduct(product);
}
}
Der Controller-instanziiert das Produkt selbst und fügt sie über die Methode in:
void AddProduct(Product product)
{
productList.Add(product);
}
Beispiel zwei:
public class OrderController
{
// Injected Repositories
private readonly IProductRepository _productRepository;
// Called by UI
public void AddProduct(int productId)
{
Order order = ...; // Persisted Order
order.AddProduct(productId, _productRepository);
}
}
Die Order
Domänenmodell hat das injizierte Produkt-Repository an sie übergeben und es wird das Produkt und fügt es:
Product AddProduct(int productId, IProductRepository productRepository)
{
Product product = productRepository.GetProduct(productId);
productList.Add(product);
return product;
}
Ich habe zur Zeit für das erste Beispiel gegangen, weil Ihre Domain Model sollte niemals intern eine Service-Methode aufrufen, jedoch Ich habe in letzter Zeit ein paar Beispiele gesehen, die mein zweites Beispiel verwenden und es sieht ordentlich aus. Es scheint mir, dass Beispiel One Rand an Anämic ist. Beispiel Zwei würde alle Product-Addition-Logik in das Domänenmodell selbst verschieben.
Es scheint, das erste Beispiel würde ein Design in Richtung gierigen Laden von Daten führen, und das zweite in Richtung Lazy Loading. Welche bevorzugen Sie? –
Wie wird Ihre Bestellung gespeichert, nachdem das Produkt zur In-Memory-Liste hinzugefügt wurde? Gibt es etwas magisches passiert (Entschuldigung, ich weiß nicht, C# vielleicht das Auftragsobjekt ist ein Proxy von einem Framework verwaltet?) –