【发布时间】:2022-06-15 20:37:23
【问题描述】:
有人可以澄清以下主题吗?我还没有找到足够复杂的答案,只是一些基本的例子来说明它应该如何工作,所以我在这里问。
假设我们有一个实体发票。 Invoice 有一些私有属性,例如开具日期、付款日期、物品等。
根据 DDD 的原则,域应该只关心自己,而不关心周围的世界。如果是发票,则意味着您可以开具,可以添加项目,您可能可以更改付款日期等。
但是发票有责任关心从中提取数据吗?我的意思是,例如在 Doctrine 中,您将为所有属性创建吸气剂,这绝对没问题。但我相信这不是你想在 DDD 中做的事情——我认为 Invoice 应该只关心它的状态和修改它,而不是为它的所有属性提供数百个 getter。
所以我的问题是 - 将数据从实体提取到例如的最佳方法是什么? DTO?真的是吸气剂吗?或者你应该使用反射吗?实体 => 转换器(使用反射)=> DTO?
顺便说一句,当你将Entity转换为DTO时,你应该使用第三个,transformer,class,还是调用Entity上的某些方法将自己转换为DTO(如$Invoice->toDetailDto())?我认为调用->toDetailDto 是违反单一职责的,但另一方面,它解决了在不使用反射和没有数百个getter 的情况下访问实体的私有属性的问题。
【问题讨论】:
标签: php domain-driven-design dto