【问题标题】:DDD, external datas and RepositoryDDD、外部数据和存储库
【发布时间】:2016-05-01 15:41:24
【问题描述】:

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

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

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

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

我说的对吗?

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

非常感谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    这两种方法在Implementing Domain-Driven Design一书中都有很好的解释

    【讨论】:

    • 优秀的答案。如果现有系统允许,我可能会选择 2)。
    猜你喜欢
    • 1970-01-01
    • 2013-12-05
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    相关资源
    最近更新 更多