【问题标题】:How to name the domain services in DDD如何在 DDD 中命名域服务
【发布时间】:2019-11-26 00:58:06
【问题描述】:

我是 DDD 的新手,在使用 DDD 原则编写新项目时遇到问题,它是关于创建域服务的。我总是用相应的域对象名称前缀命名我的服务,例如UserServiceOrderService,并将所有与DO相关的业务逻辑方法放入这些服务中。所以我有UserService,例如,具有创建新用户、禁用现有用户、执行其他用例等的方法。
现在我注意到我可以为每个用例创建一个服务,而不是为每个 DO 创建一个大服务。例如,一个名为CreateUserService 的服务和另一个名为RemoveUserService 的服务等等。

问题是,是推荐这种新方法还是以前的方法更好?

【问题讨论】:

    标签: java coding-style domain-driven-design code-cleanup ddd-service


    【解决方案1】:

    尝试迭代向 DDD,然后第一步是:面向对象编程。那么为什么需要用户服务呢?您可以在 User 对象本身上使用 User.Create(IUserCreator creator) 静态方法来解决问题。尝试将行为封装到它所属的对象中。

    只要您只需要一些小数据或一切都可用。通过实体模型(或 ORM 模型树),您将不需要服务。在很多情况下,域事件可以为您提供很多帮助,这些可以通过多种方式实现,一种遵循连续流(我喜欢的那种)或双重调度 - 请参阅 Jimmy Bogard 文章:https://lostechies.com/jimmybogard/2010/03/30/strengthening-your-domain-the-double-dispatch-pattern/ - 这取决于个人品味和架构...

    现在,如果要创建 UserService 或 UserCreationService,UserDeletionService - 这真的取决于。还要区分域服务(应该与纯域对象一起使用,一些用于复杂内容的“接口” - 或用于加载)和应用程序服务(进行更多的编排) - 示例:MVC 控制器执行:路由、身份验证和授权,数据加载,保存,...无论如何,如果您需要换出实现,则创建较小的服务和使用 DI 会有所帮助+它是来自实体的 S(单一责任原则 - SRP)...实际上在我的 User.Create(IUserCreation) 中IUserCreation其实就是你的UserCreaitonService的一个接口……

    阅读 DDD 我可以建议您查看 Vladimir Khorikov 的文章:https://enterprisecraftsmanship.com/posts/domain-vs-application-services/他的文章非常好

    现在使用 ORM,DDD 发生了很大变化,并且没有注意到这些细节(没有关于它的书籍)。您可以在 我的文章,LinkedIn 中找到最接近的内容,您可能需要一个 LI 帐户才能访问它们),无论如何链接都在这里(如果您喜欢它们,请分享):

    1. DDD系列4篇:https://www.linkedin.com/pulse/code-better-ddd-building-blocks-architecture-uow-due-hideghety/
    2. 使用 ORM 时存储库中的重要差异:https://www.linkedin.com/pulse/orm-repository-pattern-never-good-friends-see-balazs-hideghety/
    3. 使用 DDD 进行单元测试的方法(以及为什么不创建或模拟 dalse 存储库):https://www.linkedin.com/pulse/testing-domain-logic-easy-way-balazs-hideghety/
    4. 以及使用 ORM 时遇到的一系列问题:https://www.linkedin.com/pulse/get-know-your-orm-avoid-bad-habits-balazs-hideghety/

    同样在做 MVC 时,Jimmy Bogard 有一个超级方法(不仅仅是基于功能的文件夹结构),而是切片而不是层,所以一定要检查一下(我自己没用过,但它是一个很好的架构模式) :https://www.youtube.com/watch?v=wTd-VcJCs_M

    【讨论】:

      猜你喜欢
      • 2016-11-15
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 2019-08-23
      • 2013-06-04
      • 2014-12-02
      相关资源
      最近更新 更多