Богатая модель предметной области с поведением и ORM

После просмотра презентации NDC12 "Создание Wicked Domain Models" от Джимми Богарда (http://ndcoslo.oktaset.com/Agenda), я размышлял, как сохранить это разновидность доменной модели.
Это пример класса из презентации:

public class Member
{
    List _offers;

    public Member(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
        _offers = new List();
    }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public IEnumerable 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;
    }
}

, поэтому в этой модели предметной области содержатся некоторые правила:
- Участник должен иметь имя и фамилию
- Количество предложений не может быть изменено снаружи
- Участник отвечает за создание нового предложения, расчет его стоимости и назначение.

Если попытаться сопоставить это с какой-либо ORM, такой как Entity Framework или NHibernate, это не сработает. Итак, каков наилучший подход для сопоставления такой модели с базой данных с помощью ORM?
Например, как мне загрузить AssignedOffers из БД, если нет сеттера?

Единственное, что имеет смысл для меня, — это использование архитектуры команд/запросов: в качестве результата запросы всегда выполняются с DTO, а не сущностями предметной области, а команды выполняются на моделях предметной области. Кроме того, источник событий идеально подходит для поведения в модели предметной области. Но такая архитектура CQS подходит не для каждого проекта, особенно для уже существующих. Или не?

Я знаю о подобных вопросах здесь, но не смог найти конкретного примера и решения.

17
задан Hrvoje Hudo 27 June 2012 в 08:59
поделиться