Я изо всех сил пытаюсь найти правильный дизайн, чтобы избежать ссылки на хранилище от сущности ... Допустим, у меня есть классические классы Customer
и Order
, например:
public class Customer {
...
public IEnumerable<Order> Orders { get; set; }
}
public class Order {
...
public Customer Customer { get; set; }
public IEnumerable<OrderItem> OrderItems { get; set; }
public void Submit() {
...
}
}
public class OrderItem {
public Product Product { get; set; }
public decimal SellingPrice { get; set; }
}
Теперь предположим, что цена продажи Продукта по какой-то причине зависит от того факта, что Продукт также был приобретен (или нет) по предыдущему Заказу, по количеству позиций по текущему заказу и предыдущему заказу и т. Д. Я мог сделатьэто:
public void Submit() {
Order lastOrder = this.Customer.Orders.LastOrDefault();
CalculatePrice(lastOrder);
, но это загружает весь список заказов , когда мне действительно нужен только последний!
Что я хотел бы сделать, эточто-то вроде этого:
public void Submit() {
Order lastOrder = _orderRepository.GetLastOrderFor(Customer);
CalculatePrice(lastOrder);
Но я понимаю, что ссылка на OrderRepository
в Домене - это плохой DDD.Итак, что мне делать?Нужно ли размещать Submit () в другом месте, чем в домене?Если да, то где вы предлагаете?