Domain driven design DDD、外部数据和存储库
我想在下一个应用程序中使用DDD。我已经找到了很多有趣的论文和答案,但无法找到解决问题的方法: 我们有一个SOA。体系结构,其中一些服务被称为其数据的主服务。这很好,但我不知道如何在DDD中很好地使用它们 如果服务“employees”是Domain driven design DDD、外部数据和存储库,domain-driven-design,ddd-repositories,ddd-service,Domain Driven Design,Ddd Repositories,Ddd Service,我想在下一个应用程序中使用DDD。我已经找到了很多有趣的论文和答案,但无法找到解决问题的方法: 我们有一个SOA。体系结构,其中一些服务被称为其数据的主服务。这很好,但我不知道如何在DDD中很好地使用它们 如果服务“employees”是employees数据的主人,那么它是对几个简单值(名字和姓氏、出生日期、地址)的crud。 我的新应用程序应该跟踪为这些员工提供的培训。因此我有了参与者的概念,参与者与员工具有相同的价值观,再加上一系列培训和一项技能 我们可以假设“trainings”应用程序
employees
数据的主人,那么它是对几个简单值(名字和姓氏、出生日期、地址)的crud。
我的新应用程序应该跟踪为这些员工提供的培训。因此我有了参与者
的概念,参与者
与员工
具有相同的价值观,再加上一系列培训和一项技能
我们可以假设“trainings”应用程序有一个包含参与者表的数据库,其中包含一个参与者id
、技能
和一个员工id
,用于检索名字和姓氏
我说得对吗
但是现在,我可以使用哪个组件来称“员工”服务?是不是因为participatentrepository
,所以当我得到一个参与者时,我有他的名字。或者是应用程序服务在使用参与者数据之前完成了参与者数据。或者我可以在需要的时候直接给员工服务部打电话吗
非常感谢。在您的培训应用程序中(我的意思是在您的应用程序域中),员工的概念可能不作为外部参考而存在。正如你所说的,这将是一个参与者 我知道您需要从员工服务获取一些数据来填充参与者。我想不出什么办法 1) ParticipantRepository生成一个参与者,它是一个聚合根,其中一些数据可能位于
PersonalDetails
value对象中。此值对象是通过调用employee应用程序构建的。这种方法很简单,但可能不是最好的。这就是您提到的方法,其中ParticipantRepository调用接口PersonalDetailsService
,该接口的实现实际调用员工服务。通过这种方式,您的域不知道正在与员工打交道,因为它只看到个人详细信息
2) 通过复制员工服务中的数据实现最终一致性:如果员工服务可以在员工更新时发送通知(例如,通过消息),则您可以侦听这些事件并拥有数据的只读副本。这样做的好处是,即使员工服务宕机,你的应用程序也能正常工作。问题是您可能需要构建一些东西来重新发送可能丢失的数据
这两种方法在书中都有很好的解释非常好的答案。如果现有系统允许的话,我可能会同意。