Модели моделирования NHibernate POCO, создающие другие экземпляры - PullRequest
0 голосов
/ 09 декабря 2011

Это вопрос Nhibernate, который беспокоил меня в течение некоторого времени ...

Если я смоделирую простой домен ввода заказа как:

public class Order: BaseEntity
{
   public virtual Customer Customer {get; set;}

   public Order(Customer customer)
   {
    ...
   }
}

public class Customer: BaseEntity
{
   public virtual string Name {get; set;}

   public virtual Order CreateOrder()
   {
      return new Order(this);
   }
}

Хотя приведенный выше код работает для создания экземпляра Order, вновь созданный экземпляр не будет сохранен в БД, если только:

  1. BaseEntity или производный класс знают о NHibernate сеанс (который нарушает POCO)
  2. Существует сервисный уровень (или хранилище), который вызывает ISession.Save () для недавно созданный объект Order, который должен быть осведомлен о NHibernate

Таким образом, это заставляет меня поверить, что мои классы NHibernate POCO сами по себе не должны содержать каких-либо наших бизнес-правил (и должны быть сохранены только для свойств и конструкторов), но уровень обслуживания «над» моделью домена должен находиться там, где логика должна жить. Предположительно, этот сервисный уровень получит свою постоянную функциональность через внедрение зависимостей.

Кто-нибудь хочет подтвердить / опровергнуть мое утверждение о том, что бизнес-методы НЕ должны существовать в модели POCO?

Спасибо

David

1 Ответ

0 голосов
/ 09 декабря 2011

Бизнес-логика в доменной модели - это главное, что нужно для модели в первую очередь.

Вы можете использовать каскадную функцию Nhibernate, чтобы ваш заказ автоматически сохранялся, если клиент, владеющий им, является постоянным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...