首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDD中的共享业务逻辑和事件

问DDD中的共享业务逻辑和事件
EN

Stack Overflow用户
提问于 2022-09-13 19:48:39
回答 1查看 56关注 0票数 1

我目前正在检查DDD模式,并试图相应地重构我的一个项目。

现在,我遇到了一个我不知道该做什么的例子:一些业务逻辑可以被多个实体调用。在我的例子中,可以将items标记为hidden。

item可以是Product或Category (或更多)。

相关事件称为MarkedItemAsHidden,由名为MarkItemAsHidden的动作处理程序触发,该处理程序接受item作为第一个参数,并根据item类触发事件。

所以我得到了:

MarkedItemAsHidden

  • Actions:MarkItemAsHidden($item)

  • Projector:HidingProjector

:

  • Events

但我该把这些课放在哪里呢?

我的应用程序有一个Domain-directory,它包括:

  • Product
  • Category
  • Cart
  • ...

但我真的不能决定把这些“共享类”放在哪里。

EN

回答 1

Stack Overflow用户

发布于 2022-09-16 04:34:05

您所描述的部分内容超出了您的域的范围。

您的域从应用程序服务开始。应用程序服务位于域的边界上。应用程序服务的工作是将外部消息转换为域操作。

例如:假设您有一个完整的UI和域应用程序。你想把“物品”标记为“隐藏”。所以你:

来自您的"Action“的

  1. 触发器可能在UI中(一个按钮被单击作为示例)。这是域之外的。单击生成由ApplicationService(ItemAppService)处理的事件。事件到底如何到达应用程序服务是一个实现细节(它不是DDD问题)。例如: ItemAppService可以是Rest应用程序中的Controller类。在本例中,您的事件是HTTP,实现细节类似于ASP.net核心API框架,该框架将HTTP调用路由到Controller.

  1. ItemAppService.Hide(ID:字符串)是最终触发的方法。ItemAppService在域内,它使用类似工厂和存储库的领域概念,可以检索“Item”的实例.

  1. 在检索"Item“之后,将调用一个知道如何隐藏项的DomainService (或基于您无处不在的语言的适当域类)。

  1. 然后在结果上向调用者返回某种类型的响应。

ItemAppService并不关心它的隐藏函数是如何调用的。您不能传递隐藏域实体,因为这意味着域操作的使用者知道获取实体的内容和方法。

如果您的意图是使用事件和触发器作为域模型的一部分,则必须将这些概念转换为无处不在的语言。当您在域内执行"generate“之类的操作时,您的域并不关心如何”生成事件“,因此逻辑或处理通常留给域外的某个内容(通过IOC注入),这些内容可以包含如何”生成事件“的特定知识。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73708526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档