gpt4 book ai didi

performance - 胖域模型=>低效率?

转载 作者:行者123 更新时间:2023-12-02 04:18:33 25 4
gpt4 key购买 nike

从DDD来看,我们将数据库抽象为我们要操作的各种模型,并将其视为模型所在的存储库。然后,在其之上添加数据层和服务/业务层。我的问题是,这样做是否会通过建立胖模型而导致数据传输效率低下?

例如,假设我们有一个系统在屏幕上显示客户的发票。
从OOP的角度来看,我们可能最终得到一个看起来像这样的对象:

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属性,就会脱离抽象,这似乎是一种可怕的做法。第三,像客户一样填充一半对象似乎是一个非常糟糕的主意,因为您可能最终创建同一对象的多个版本(例如,一个具有一个地址,但没有ShoppingHistory的版本,一个具有AccountingInfo但没有地址等)。我缺少什么,还是不了解?

最佳答案

由于良好的对象关系映射器可以延迟加载关系,因此您将撤回客户的发票,但忽略其会计和购物历史记录。如果您不使用对象关系映射器,则可以自己滚动。

通常,您无法在客户端中执行此操作,因为您已经越过了事务边界(结束了数据库事务),因此由服务层来确保已加载正确的数据。

在服务层的单元测试中,测试可用的正确数据(但不是太多)通常是一件好事。

关于performance - 胖域模型=>低效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1148094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com