ASP.NET MVCを使用してWebアプリケーションを作成していますが、ドメイン駆動型設計を使用しようとしています。私は建築の質問があります。ASP.NET MVC/DDDアーキテクチャヘルプ
リストのキーと値を編集できるように保存するWebControlテーブルがあります。私はこれを私のビジネスモデルに取り入れましたが、それは冗長なコードがたくさんあり、それがそこに属しているかわかりません。たとえば、私のリクエストクラスには、NeedTypeというプロパティがあります。これはリストから来ているので、ラジオボタンの値を提供するためにNeedTypeクラスを作成しました。私はここで一つの例を示していますが、そのフォームはおそらくデータベースから来る必要があるダースかそれ以上のリストを持っています。
[編集、質問を明確にする]これを行うにはどうすればよいでしょうか?これらのリストオブジェクトは実際に私のドメインの一部ですか、それともUIのためだけ存在していますか?ドメインの一部ではない場合、それらは私のコアプロジェクトに属しません。そこで彼らはどこに行くのですか?
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();
}
}
"貧血ドメインモデル"は必ずしも悪いことではありません。たとえば、ドメインオブジェクトの検証ルールは、使用されているプロセスに応じて変更される可能性があります。検証ルールを自分のモデルとは別にすることで、モデルの貧血をより詳細に設定できます。 –
ドメインモデルはエンティティだけではありません。ファクトリ、バリューオブジェクト、リポジトリ、ドメインサービス(認証サービスのようなアプリケーションサービスではない)もドメインの一部です。私はさまざまな場所でさまざまな目的のために検証を使用しますが、それは私のドメインモデルを貧血にしなければならないという意味ではありません。 – Paco
これはオブジェクト指向プログラミングと手続き型プログラミングの違いです。 – Paco