2015-09-19 3 views
3

Я немного смущен о домене в архитектуре архитектуры Driven Designed.Занесение объектов домена с данными в архитектуре архитектуры, управляемой доменом

Я понимаю, что четыре слоя - это презентация, приложение, домен и инфраструктура, где Infrastructure содержит репозитории данных.

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

До этого я бы вводил репозитории в сервисный уровень. Поэтому мой вопрос: нормально ли вводить репозитории в объекты Domain, чтобы они могли выполнять бизнес-правила?

ответ

3

Нет, это не хорошо вводить репозитории в доменные объекты :)

Что является приемлемым, но только если не действительно нет другого пути, чтобы пройти в хранилищах или других доменах таких объектов в качестве услуги в методе AR для выполнения некоторых функций с помощью метода двойной диспетчеризации:

public void ApplyDiscount(IDiscountService service) 
{ 
    _discount = service.Discount(customerType); 
} 

Как я уже говорил в других постах, я склонен думать о AR, как я бы физический калькулятор. Через клавиатуру есть вход, и через экран выводится вывод. Хотя калькулятор делает свой вуду, он не взаимодействует ни с чем другим и не запрашивает дополнительную информацию. Это, как говорится, есть, вероятно, будет исключение, как в приведенном выше примере, но я предполагаю, что скидка может быть определена с помощью операции сценария (службы слоя):

public void RegisterOrderTask 
{ 
    private IDiscountService _discountService; 
    private IOrderRepository _orderRepository; 

    public void RegisterOrderTask(IDiscountService discountService, IOrderRepository orderRepository) 
    { 
     _discountService = discountService; 
     _orderRepository = orderRepository; 
    } 

    public void Execute(OrderDetails details) 
    { 
     _orderRepository 
      .Add(details.CreateOrder() 
        .SetDiscount(_disocuntService.Discount(details.CustomerType))); 
    } 
} 

Это лишь некоторые состоят идеи, но может получить вы думаете о своем сценарии :)

+0

Спасибо! Ваш ответ был действительно полезен. Эта статья также была очень полезна: http://digitalpolis.co.uk/software-thoughts/ddd-mvc-entity-framework/ – user11081980