Jimmy Bogard( http://ndcoslo.oktaset.com/Agenda )からのNDC12プレゼンテーション「CraftingWicked Domain Models」を見た後、私はその種のドメインモデルを永続化する方法をさまよっていました。
これはプレゼンテーションのサンプルクラスです。
public class Member
{
List<Offer> _offers;
public Member(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
_offers = new List<Offer>();
}
public string FirstName { get; set; }
public string LastName { get; set; }
public IEnumerable<Offer> AssignedOffers {
get { return _offers; }
}
public int NumberOfOffers { get; private set; }
public Offer AssignOffer(OfferType offerType, IOfferValueCalc valueCalc)
{
var value = valueCalc.CalculateValue(this, offerType);
var expiration = offerType.CalculateExpiration();
var offer = new Offer(this, offerType, expiration, value);
_offers.Add(offer);
NumberOfOffers++;
return offer;
}
}
したがって、このドメインモデルにはいくつかのルールが含まれています。-
メンバーは姓名を持っている必要があり
ます-オファーの数は外部で変更できません
-メンバーは新しいオファーを作成し、その価値と割り当てを計算する責任があります
これをEntityFrameworkやNHibernateなどのORMにマップしようとすると、機能しません。では、この種のモデルをORMを使用してデータベースにマッピングするための最良のアプローチは何でしょうか。
たとえば、セッターがない場合、DBからAssignedOffersをロードするにはどうすればよいですか?
私にとって意味のあることは、コマンド/クエリアーキテクチャを使用することだけです。クエリは常にドメインエンティティではなくDTOを使用して実行され、コマンドはドメインモデルで実行されます。また、イベントソーシングは、ドメインモデルの動作に最適です。しかし、この種のCQSアーキテクチャは、すべてのプロジェクト、特にブラウンフィールドに適しているとは限りません。か否か?
私はここで同様の質問を知っていますが、具体的な例と解決策を見つけることができませんでした。