Глядя на DDD, мы абстрагируем базу данных от различных моделей, над которыми работаем, и рассматриваем ее как хранилище, в котором живут наши модели. Затем мы добавляем уровни данных и уровни обслуживания / бизнеса. Мой вопрос заключается в том, создаем ли мы при этом неэффективность передачи данных путем построения жирных моделей?
Например, скажем, у нас есть система, которая отображает счет для покупателя на экране.
Думая об этом с точки зрения ООП, мы, вероятно, в итоге получили бы объект, который выглядит примерно так:
class Invoice {
Customer _customer;
OrderItems _orderitems;
ShippingInfo _shippingInfo;
}
class Customer {
string name;
int customerID;
Address customerAddress;
AccountingInfo accountingInfo;
ShoppingHistory customerHistory;
}
(for the sake of the question/argument,
let's say it was determined that the customer class had to
implement AccountingInfo and ShoppingHistory)
Если в счете исключительно необходимо напечатать имя клиента, зачем нам брать с собой весь другой багаж? При использовании подхода с использованием репозитория создается впечатление, что мы будем создавать эти сложные доменные объекты, которые требуют всех этих ресурсов (ЦП, память, сложные объединения запросов и т. Д.), И затем передавать их по каналам клиенту.
Простое добавление свойства customerName к классу счетов-фактур оторвется от абстракций и станет ужасной практикой. С третьей стороны, наполовину заполнение объекта, такого как Customer, кажется очень плохой идеей, так как вы можете создать несколько версий одного и того же объекта (например, тот, у которого есть Address, но нет ShoppingHistory, и тот, у которого есть AccountingInfo, но нет Адрес и т. Д. И т. Д.). Что я упускаю или не понимаю?