如何在 DTO 和领域模型之间共享业务逻辑?

How to share business logic between DTO & domain model?

我正在尝试重构将域模型传递给视图的代码库,以改用 DTO。

总的来说,现在一切看起来都更干净了,除了一点:我有一些属于域但也需要在视图中执行的业务逻辑。

示例:我有一个 Activity class,它有一个方法来检查给定的 User 是否可以编辑它:

class Activity {
    public function isEditableBy(User $user): bool {
        ...
    }
}

问题:如何避免在 DTO 和模型中重复此逻辑?

我觉得你根本不应该把逻辑放在 DTO 中,因为它的定义是“数据传输对象”。所以,“数据”不是“逻辑”。相反,您可以在应用程序服务层中计算 isEditableBy() 方法的结果,将此结果放入 DTO 并在视图层中使用 DTO。