DDD,外部数据和存储库

时间:2016-01-25 10:50:00

标签: domain-driven-design ddd-repositories ddd-service

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

我们有一个SOA。架构,其中一些服务被称为其数据的主人。这很好,但我无法想象如何与DDD很好地使用它们。

如果服务“员工”是Employee数据的主人,那么对于几个简单的值(名字和姓氏,生日,地址)来说,这是一个小问题。 我的新应用程序应跟踪为这些员工提供的培训。所以我有Participant的概念,Participant具有与Employee相同的值以及培训和技能列表。

我们可以假设“trainings”应用程序有一个数据库,其中包含一个参与者表,其中包含用于检索名字和姓氏的participant_idskill和一个employee_id。< / p>

我说错了吗?

但是现在,我可以使用哪个组件来调用“员工”服务?它是ParticipantRepository所以当我得到一个参与者时,我有名字。或者是应用程序服务在使用它们之前完成Participant数据。或者我可以在需要时明确地呼叫员工服务吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

在您的培训申请中(我的意思是在您的申请领域),员工的概念可能不会作为外部参考而存在。正如你所说,那将是参与者。

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

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

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

这两种方法在Implementing Domain-Driven Design

一书中都有很好的解释