gpt4 book ai didi

domain-driven-design - DDD 中重构工厂和存储库之间的关系是什么?

转载 作者:行者123 更新时间:2023-12-04 08:22:30 25 4
gpt4 key购买 nike

根据 Evans 的说法,在 DDD 中我们有两种类型的工厂,一种用于创建对象,另一种用于重构存储的对象。

a) 虽然 Creation factories可以作为 Standalone Factory objects 存在或作为 Factory methods在聚合的根上定义,应该 Reconstitution Factories仅作为 Standalone Factory objects 存在?

b) 我假设 Reconstitution Factories应该只由存储库使用/调用,它将对象创建委托(delegate)给它们?

c) 应该 Reconstitution Factoriesdomain layer 中定义,即使它们只会被存储库使用?

更新:

我的问题本质上是纯理论的,因为我才开始学习 DDD

I assume that your objects are persisted in a RDBMS not in an oo db .



是的,它们被持久化到关系数据库中

I see them as simple data transition from the DB to a domain object (get the field from result set and put it in the object, without any validation or other logic)



a) 如果我理解正确,您的意思是即使特定对象的创建足够复杂,可以使用 creation factory对它来说,在大多数情况下,对同一对象的重构并不像创建它那样复杂,因此不需要 reconstitution factory。 ?

b)您为什么重构不如创建复杂的推理是基于存储在数据库中的对象已经处于有效状态的假设?

Data mapping objects should be in a different layer. The data mapping layer should be unknown to the domain



我同意

C)

I consider "reconstitution factories" as data mappers and they should reside outside the domain.



但根据埃文斯的说法,工厂(我假设他的意思是创建和重构工厂)正在处理领域概念(即他们必须了解他们试图创建/重构的实体或聚合的内部结构),因此是领域的一部分(即使它们不代表任何领域概念),而数据映射器不是领域的一部分,也不知道对象的内部结构?!

谢谢

最佳答案

我假设您的对象保存在 RDBMS 中而不是 oo db 中。

应该始终处于有效状态的已持久对象的重构并不复杂。我将它们视为从数据库到域对象的简单数据转换(从结果集中获取字段并将其放入对象中,无需任何验证或其他逻辑)。为简单起见,在我看来,存储库中基于结果集重建对象的方法足以使存储库保持高度内聚。

如果你真的想走重构工厂的路(并且如果你的领域足够复杂以至于需要这样的对象),也许你需要一个合适的 ORM 框架。数据映射对象应该在不同的层。 数据映射层应该是领域未知的。 来自 Martin Fowler 的网站:“Repository 还支持实现域和数据之间的干净分离和单向依赖的目标 mapping layers。” , link

我认为“重组工厂”为 data mappers他们应该驻留在域之外。

关于domain-driven-design - DDD 中重构工厂和存储库之间的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20979253/

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