2

我正在考虑将 DDD 用于我们的下一个应用程序。我已经找到了很多有趣的论文和答案,但找不到解决我的问题的方法:

我们有一个 SOA。某些服务被称为其数据的主人的架构。这很好,但我不知道如何将它们与 DDD 很好地结合使用。

给定一个作为数据主人的服务“员工” Employee,它是几个简单值(名字和姓氏,生日,地址)的杂物。我的新应用程序应该跟踪为这些员工提供的培训。所以我有一个概念Participant,aParticipant与 an 具有相同的值,Employee加上一个培训列表和一项技能。

我们可以假设“培训”应用程序有一个数据库,其中包含一个参与者表,其中包含一个participant_id,skill并且一个employee_id用于检索名字和姓氏。

我对么 ?

但是现在,我可以使用哪个组件来调用“员工”服务?是不是ParticipantRepository这样,当我得到一个参与者时,我就​​有了名字。或者是应用服务Participant在使用数据之前完成数据。或者我可以在需要时明确调用员工服务?

非常感谢。

4

1 回答 1

2

在您的培训应用程序(我的意思是在您的应用程序领域)中,员工的概念可能不存在,除了外部参考。正如你所说的那样,那将是参与者。

我了解您需要从员工服务中获取一些数据来填充参与者。我能想到几个选择。

1) ParticipantRepository 构建一个 Participant,它是一个聚合根,其中一些数据可能在一个PersonalDetails值对象中。这个值对象是通过调用员工应用程序来构造的。这种方法很简单,但可能不是最好的。这是您提到的方法,其中 ParticipantRepository 调用一个接口PersonalDetailsService,该接口的实现对 Employee 服务进行实际调用。通过这种方式,您的域不知道与员工打交道,因为它只看到 PersonalDetails。

2) 通过从员工服务复制数据实现最终一致性:如果员工服务可以在员工更新时发送通知(例如通过消息传递),您可以监听这些事件并获得数据的只读副本。这样做的好处是,即使员工服务出现故障,您的应用程序也能正常工作。问题是您可能需要构建一些东西来重新发送可能丢失的数据。

这两种方法在实施领域驱动设计一书中都有很好的解释

于 2016-01-25T11:17:04.037 回答