我正在学习 DDD 并且有这个基本问题:
似乎工厂、丰富的域模型、存储库(CRUD 的)创建、读取、更新都得到了处理,但是删除呢?删除实体可能有一些业务逻辑,您在哪里处理?RepositoryImpl(属于基础设施)层不应该检查那些不变量,它的工作是从底层数据存储中删除给定的实体。这似乎与工厂的意图截然相反,但 DDD 没有类似“杀死”工厂以进行删除的功能。
假设有一个用户可以删除的订单实体,但直到它处于“已完成”状态,所以请求删除的客户端repo.delete(ent)
应该得到一个异常。同样,在某些情况下,当客户端请求删除时,它会导致更新(可能是状态更改或设置软删除标志)。
应该在哪里处理这种情况entity.delete()
(这有意义吗?)或在称为删除的应用程序或域服务中。我担心的是只要Repository接口有那个叫做delete的方法,任何客户端都可以绕过服务方法直接调用repo方法。
只是为了添加一个上下文,我将如何构建我的层是通过 Java 包,并使用包可见性作为一种工具来禁止破坏层之间的交互。