Как определить состояние бизнес-объекта - .NET, NHibernate - PullRequest
0 голосов
/ 14 февраля 2011

В процессе разработки моего приложения ASP.NET MVC + NHibernate я столкнулся с трудной (для меня) проблемой.

В моем домене проектов у меня есть объекты, давайте назовем их «статьями» (например, на сайте BBC или что-то в этом роде). Эта статья описана несколькими свойствами:

Авт -Дата создания -IsTemp -IsApproved

Эти объекты могут находиться в нескольких состояниях:

  • Temp - IsTemp == true, все остальное не важно
  • Одобрено - IsApproved == true
  • Ожидание - IsTemp == false && IsApproved == false && CreationDate + 10 days> DateTime.Now
  • Истекло - IsTemp = false && IsApproved == false && CreationDate + 10 дней

(Приведенное выше описание является лишь примером - мой домен немного сложнее, но проблема идентична)

И вот вопрос: когда я должен обнаруживать состояния статей? Я хочу, чтобы пользователь мог перечислить, например, все утвержденные статьи и т. Д.

  • Должен ли я использовать фоновый процесс для обновления состояния всех статей каждые 10 минут? Это как-то воняет для меня.
  • Должен ли я использовать свой класс Article (метод GetState или что-то в этом роде?) - тогда я теряю возможность запрашивать состояния по HQL, и я вынужден получать все сущности из БД для выполнения разбиения на страницы и обнаружения состояния
  • Должен ли я подготовить запросы по конкретному состоянию? (Repository.GetAll (State.Temp)) - этот также вонючий, потому что я не хочу, чтобы мои бизнес-правила (которые могут изменяться / расширяться) просачивались в мой слой DAL.
  • Должен ли я расширить функциональность NHibernate? Я никогда этого не делал, поэтому не знаю, реально ли это.

Это большая проблема для меня. Есть идеи?

С уважением, Karczas

Ответы [ 2 ]

0 голосов
/ 14 февраля 2011

Я буду пересчитывать состояние каждый раз, когда изменяется одно из свойств состояния источника.

Так, например, IsApproved property-setter назовет RecalculateStatus() method.

RecalculateStatus () 'должен изменять статус только в случае изменения статуса. таким образом, вы можете безопасно вызывать RecalculateStatus () в любое время

0 голосов
/ 14 февраля 2011

Взгляните на шаблон конечного автомата , который реализован, например, здесь .

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