Нет, это не хорошо вводить репозитории в доменные объекты :)
Что является приемлемым, но только если не действительно нет другого пути, чтобы пройти в хранилищах или других доменах таких объектов в качестве услуги в методе 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)));
}
}
Это лишь некоторые состоят идеи, но может получить вы думаете о своем сценарии :)
Спасибо! Ваш ответ был действительно полезен. Эта статья также была очень полезна: http://digitalpolis.co.uk/software-thoughts/ddd-mvc-entity-framework/ – user11081980