如果根据视图有多个同一对象的表示,如何解决这种情况?
例如,假设您有一个书店。在书店中,您有2个主要的书籍代表:
案例2很清楚,你可以从DB获得并显示它。但是如何解决案例1.如果要减少与DB之间的连接数和有效负载数?因此,如果您不想从数据库中获取所有实际的作者和评论,而只需要2个整数来计算每个作者的数量。
完全规范化的解决方案将是2,但是1似乎需要一些非规范化或创建2个不同的实体:BusinessDetails和BookCompact在业务层中。
重要提示:我不是在讨论View DTO,而是从DB中获取不适合Business Layer Book类的数据。
答案 0 :(得分:0)
对我而言,它听起来像多个查询模型(QM)。 我使用了具有CQRS / ES样式的DDD,因此聚合根根据传入的命令生成事件。对于这些事件,订阅多个QM。所以我根据要求创建了多个“视图” ES(事件采购)具有巨大的力量 - 我可以通过重放存储的事件来引入另一个QM 听起来像管理很多相似甚至重复的数据,但它对我来说很有意义 QM可以并且被优化以包含足够的数据/结构/索引以用于给定目的。这是摆脱“共享数据模型”的出路。我看到“RDMS”中的巨大邪恶就是所有方法。您将永远迷失在管理共享模型的复杂性中 - 就像您一样。
答案 1 :(得分:0)
我的设计结果非常好:
domain
包中包含@Entity
个类,其中包含存储在数据库中的所有必要数据
dto
包,其中包含将从服务中返回的实体的视图/视图
Dto应该有以实体为参数的构造函数。要更轻松地复制数据,您可以使用BeanUtils.copyProperties(domainClass, dtoClass);
通过这样做,您只共享最少量的信息,并在没有任何功能的对象中返回。