看着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)
如果发票只需要打印客户名称,为什么我们要携带所有其他信息呢?使用仓储类型的方法似乎会构建这些复杂的领域对象,这些对象需要所有这些资源(CPU、内存、复杂的查询连接等),然后将其传输到客户端。
简单地向发票类添加一个customerName属性会打破抽象,并且似乎是一种可怕的做法。另一方面,像Customer这样的对象填充一半似乎是一个非常糟糕的想法,因为您可能会创建多个版本的同一对象(例如,一个具有Address但没有ShoppingHistory的对象,以及一个具有AccountingInfo但没有Address的对象等等)。我缺少什么或者我没有理解?