Ich erstelle eine Webanwendung, die ASP.NET MVC verwendet, und ich versuche, domänengesteuertes Design zu verwenden. Ich habe eine Architekturfrage.ASP.NET MVC/DDD-Architekturhilfe
Ich habe eine WebControl-Tabelle, um Schlüssel und Werte für Listen zu speichern, damit sie bearbeitet werden können. Ich habe dies in mein Geschäftsmodell integriert, aber es führt zu viel redundantem Code, und ich bin mir nicht sicher, ob es dazu gehört. Zum Beispiel habe ich in meiner Request-Klasse eine Eigenschaft namens NeedType. Da dies aus einer Liste stammt, habe ich eine NeedType-Klasse erstellt, um die Werte für die Optionsfelder bereitzustellen. Ich zeige hier nur ein Beispiel, aber das Formular wird wahrscheinlich ein Dutzend Listen haben, die aus der Datenbank kommen müssen.
[bearbeiten, um Frage zu klären] Was ist eine bessere Möglichkeit, dies zu tun? Sind diese Listenobjekte wirklich Teil meiner Domäne oder existieren sie nur für die Benutzeroberfläche? Wenn sie nicht Teil der Domain sind, dann gehören sie nicht in mein Core-Projekt, also wohin gehen sie?
public class Request : DomainObject
{
public virtual int RequestId { get; set; }
public virtual DateTime SubmissionDate { get; set; }
public virtual string NeedType { get; set; }
public virtual string NeedDescription { get; set; }
// etc.
}
public class NeedType : DomainObject
{
public virtual int NeedTypeId { get; set; }
public virtual string NeedTypeCode { get; set; }
public virtual string NeedTypeName { get; set; }
public virtual int DisplayOrder { get; set; }
public virtual bool Active { get; set; }
}
public class RequestController : Controller
{
private readonly IRequestRepository repository;
public RequestController()
{
repository = new RequestRepository(new HybridSessionBuilder());
}
public RequestController(IRequestRepository repository)
{
this.repository = repository;
}
public ViewResult Index(RequestForm form)
{
ViewData.Add("NeedTypes", GetNeedTypes());
if (form == null)
{
form = new RequestForm();
form.BindTo(repository.GetById(125));
}
}
private NeedType[] GetNeedTypes()
{
INeedTypeRepository repo = new NeedTypeRepository(new HybridSessionBuilder());
return repo.GetAll();
}
}
Ein "anämisches Domänenmodell" ist nicht immer schlecht. Zum Beispiel können sich meine Validierungsregeln für ein Domänenobjekt je nach dem Prozess, in dem sie verwendet werden, ändern. Wenn meine Validierungsregeln von meinem Modell getrennt sind, macht dies das Modell anämisch und gleichzeitig konfigurierbarer. –
Ein Domänenmodell bezieht sich nicht nur auf Entitäten. Auch Factories, Value-Objekte, Repositories, Domain-Services (nicht Anwendungsdienste wie ein Authentication-Service) sind Teil der Domain. Ich benutze die Validierung an verschiedenen Orten und für verschiedene Zwecke, aber das bedeutet nicht, dass ich mein Domänenmodell anämisch machen muss. – Paco
Es geht um objektorientierte Programmierung versus prozedurale Programmierung. – Paco