0

I have a domain entity with the saveToFile method. This method takes an implementation of the ToFileSavable interface. And now a few questions. What is this interface in DDD? Is it a port and its impementation are adapters? In what layers should these 2 elements be placed? How does this relate to domain services?

4

1 回答 1

3

首先,保存或持久化域实体是存储库的责任,域实体本身不应该知道您是否保存了它。

例如,您有一个客户实体并且您正在实施“updateEmail”用例,这将如下所示

-Application Layer
  -> UpdateCustomerEmailUseCase (CustomerRepositoryContract customerRepo)

->Domain Layer
  --> Customer

->Infrastructure Layer
   -> CustomerRepository implements CustomerRepositoryContract

UserRepositoryContract:有一个抽象的 getById 和 save 方法。

UpdateCustomerEmailUseCase:用例的职责,一般来说,是编排高级业务逻辑,例如从存储库中获取用户,然后在客户实体中调用“updateEmail”方法,然后将客户保存到存储库中。

Customer : 有 updateEmail 的客户域实体,这里需要应用业务规则和不变量。

CustomerRepository:CustomerRepositoryContract 的实现,它只知道如何将客户保存在数据库或文件中。

DDD中的这个接口是什么?它是一个端口,它的实现是适配器吗?

端口是一个入口点,由核心逻辑提供。它定义了一组函数,在本例中为 CustomerRepositoryContract

适配器是应用程序和应用程序所需的服务之间的桥梁。它适合一个特定的端口,在这种情况下是 CustomerRepository

这与域服务有什么关系?

领域服务携带不适合实体和价值对象的领域知识。正如您所注意到的,我们在这里没有使用任何域服务,因为域逻辑适合我们的客户实体。

作为域服务实现的示例,如果您正在实现“changePassword”用例并且业务需求之一是加密该密码,则加密逻辑将不适合 User 实体,您将需要 EncryptionService 持有那个逻辑,应用层(ChangePassUseCase)然后会调用服务加密密码,然后在域实体中调用changePass,最后保存在repository中。

在这里查看更多信息: https ://enterprisecraftsmanship.com/posts/domain-vs-application-services/

我希望这回答了你的问题

于 2021-06-29T10:21:04.120 回答