如何在 DTO 和领域模型之间共享业务逻辑?
How to share business logic between DTO & domain model?
我正在尝试重构将域模型传递给视图的代码库,以改用 DTO。
总的来说,现在一切看起来都更干净了,除了一点:我有一些属于域但也需要在视图中执行的业务逻辑。
示例:我有一个 Activity
class,它有一个方法来检查给定的 User
是否可以编辑它:
class Activity {
public function isEditableBy(User $user): bool {
...
}
}
领域服务层使用该方法保证Activity可以编辑,不可以则抛出异常
如果 Activity 可由用户编辑,则视图使用此方法显示编辑按钮。
问题:如何避免在 DTO 和模型中重复此逻辑?
我觉得你根本不应该把逻辑放在 DTO 中,因为它的定义是“数据传输对象”。所以,“数据”不是“逻辑”。相反,您可以在应用程序服务层中计算 isEditableBy() 方法的结果,将此结果放入 DTO 并在视图层中使用 DTO。
我正在尝试重构将域模型传递给视图的代码库,以改用 DTO。
总的来说,现在一切看起来都更干净了,除了一点:我有一些属于域但也需要在视图中执行的业务逻辑。
示例:我有一个 Activity
class,它有一个方法来检查给定的 User
是否可以编辑它:
class Activity {
public function isEditableBy(User $user): bool {
...
}
}
领域服务层使用该方法保证Activity可以编辑,不可以则抛出异常
如果 Activity 可由用户编辑,则视图使用此方法显示编辑按钮。
问题:如何避免在 DTO 和模型中重复此逻辑?
我觉得你根本不应该把逻辑放在 DTO 中,因为它的定义是“数据传输对象”。所以,“数据”不是“逻辑”。相反,您可以在应用程序服务层中计算 isEditableBy() 方法的结果,将此结果放入 DTO 并在视图层中使用 DTO。