DDD и паттерн репозитория, куда поместить поведение относительно CRUD - PullRequest
1 голос
/ 09 марта 2012

Я стараюсь использовать как можно больше бизнес-логики в моей доменной модели.

Каждый раз, когда MyEntity обновляется, я хочу, чтобы произошли две вещи:

  1. Отправить сообщение пользователю, который его создал
  2. Проверьте, применяются ли изменения к определенным бизнес-правилам

Если сущность не является дочерней по отношению к агрегированному корню.

Обычно я получаю конкретную сущность из хранилища. Измените сущность и сохраните ее
вернуться в БД с помощью MyRepository.Save ()

В этом случае мне пришлось бы поместить бизнес-логику в мое приложение или в DAL, а не в модель предметной области. Я пытаюсь избежать использования уровня бизнес-логики, если это не является абсолютно необходимым, но я не могу вписаться в это, если я не создаю метод с именем MyEntity.Update () или что-то подобное, но у меня есть ощущение, что это не правильно способ сделать это.

1 Ответ

1 голос
/ 09 марта 2012

Сначала позвольте мне заявить, что я не против шаблонов репозитория.Недавно я успешно использовал один на проекте.

Я бы сказал, что будьте осторожны ... и если вы не можете инкапсулировать требования в ваших объектах, ваш OO подход, возможно, придется рассмотреть снова.Представление слоя доступа к данным для выполнения других задач кажется запахом кода.Я использовал Service Layor для получения запросов и управления транзакциями и версиями, но не для дополнительных вещей, таких как проверка и т. Д.Потенциально ваш уровень обслуживания может выглядеть следующим образом.

    public enum UpdateResult
    {
         Success,
         NoMyEntityFound,
         StaleData,
         InvalidRequest
    }


public class MyService
{


     ...
     ...


     public UpdateResult Update(...)
     {
          ...Start Tran
          ...Load var m = MyEntity
          ...do the bare minimum here 
          ...m.Update()
          ...Commit Tran

          return UpdateResult.Success;
     }

}

Сказав все это предостерегающим хвостом по хранилищам

http://ayende.com/blog/3955/repository-is-the-new-singleton

...