消费外部系统的域服务
Domain Service that consumes external system
我正在尝试使用 DDD 方法实施员工管理系统。该系统是使用 .Net Core 构建的。我为此系统创建了几个项目(UI、应用程序、域、基础设施)。现在在我的域层中,我有一个 Employee 实体(这是 Employee 聚合的聚合根)。业务需求是每当创建 Employee 时,我都需要进行信用检查,并且根据结果我应该为 Employee 实体更新一个名为“IsCreditCheckDone”的 属性。信用检查服务基本上是一种外部休息服务。我正在考虑在 Domain.Services.Interfaces 文件夹中创建一个名为 ICreditCheckService 的接口。我正在考虑在服务文件夹内的基础结构层中执行 ICreditCheckService。此外,ICreditCheckService 将被注入到 Employee class 中,并且 Dependency 将映射到 UI 项目的 Startup class 中。
我的问题是,当域服务使用外部系统时,它是处理域服务的正确方法吗?还是应该采取不同的方式?
EMS.Domain
实体
- Employee.cs
服务
- 接口
- ICreditCheckService.cs(这将被注入到 Employee 实体)
EMS.Infrastructure
- 服务
- CreditCheckService.cs(此服务将对外部 Rest 进行 http 调用 API)
总的来说,我觉得你的设计还是不错的。
但是有两点:
- 从术语上讲,调用外部 api 的服务不被视为域服务(域服务运行涉及多个实体的逻辑)。它更像是一个存储库。
- 存储库服务不应注入到实体中,而应注入到应用程序(用例)服务中。例如,应用程序服务调用您的信用检查服务,然后创建一个将布尔结果传递给其构造函数的员工实体。
我正在尝试使用 DDD 方法实施员工管理系统。该系统是使用 .Net Core 构建的。我为此系统创建了几个项目(UI、应用程序、域、基础设施)。现在在我的域层中,我有一个 Employee 实体(这是 Employee 聚合的聚合根)。业务需求是每当创建 Employee 时,我都需要进行信用检查,并且根据结果我应该为 Employee 实体更新一个名为“IsCreditCheckDone”的 属性。信用检查服务基本上是一种外部休息服务。我正在考虑在 Domain.Services.Interfaces 文件夹中创建一个名为 ICreditCheckService 的接口。我正在考虑在服务文件夹内的基础结构层中执行 ICreditCheckService。此外,ICreditCheckService 将被注入到 Employee class 中,并且 Dependency 将映射到 UI 项目的 Startup class 中。
我的问题是,当域服务使用外部系统时,它是处理域服务的正确方法吗?还是应该采取不同的方式?
EMS.Domain
实体
- Employee.cs
服务
- 接口
- ICreditCheckService.cs(这将被注入到 Employee 实体)
- 接口
EMS.Infrastructure
- 服务
- CreditCheckService.cs(此服务将对外部 Rest 进行 http 调用 API)
总的来说,我觉得你的设计还是不错的。
但是有两点:
- 从术语上讲,调用外部 api 的服务不被视为域服务(域服务运行涉及多个实体的逻辑)。它更像是一个存储库。
- 存储库服务不应注入到实体中,而应注入到应用程序(用例)服务中。例如,应用程序服务调用您的信用检查服务,然后创建一个将布尔结果传递给其构造函数的员工实体。