我目前正在检查DDD模式,并试图相应地重构我的一个项目。
现在,我遇到了一个我不知道该做什么的例子:一些业务逻辑可以被多个实体调用。在我的例子中,可以将items标记为hidden。
item可以是Product或Category (或更多)。
相关事件称为MarkedItemAsHidden,由名为MarkItemAsHidden的动作处理程序触发,该处理程序接受item作为第一个参数,并根据item类触发事件。
所以我得到了:
MarkedItemAsHidden
MarkItemAsHidden($item)
HidingProjector:
但我该把这些课放在哪里呢?
我的应用程序有一个Domain-directory,它包括:
ProductCategoryCart但我真的不能决定把这些“共享类”放在哪里。
发布于 2022-09-16 04:34:05
您所描述的部分内容超出了您的域的范围。
您的域从应用程序服务开始。应用程序服务位于域的边界上。应用程序服务的工作是将外部消息转换为域操作。
例如:假设您有一个完整的UI和域应用程序。你想把“物品”标记为“隐藏”。所以你:
来自您的"Action“的
ItemAppService并不关心它的隐藏函数是如何调用的。您不能传递隐藏域实体,因为这意味着域操作的使用者知道获取实体的内容和方法。
如果您的意图是使用事件和触发器作为域模型的一部分,则必须将这些概念转换为无处不在的语言。当您在域内执行"generate“之类的操作时,您的域并不关心如何”生成事件“,因此逻辑或处理通常留给域外的某个内容(通过IOC注入),这些内容可以包含如何”生成事件“的特定知识。
https://stackoverflow.com/questions/73708526
复制相似问题