【问题标题】:UML Composition vs SQL Foreign KeyUML 组合与 SQL 外键
【发布时间】:2012-10-30 06:26:55
【问题描述】:

以下图像(即不可导航的组合关系)在域模型的早期 UML 类图中是否有意义?

我想表达的是,Company.Accounts 是不可能的,但是如果 Company 对象被销毁,所有 Accounts 也将被销毁。我的动机是避免 Company 类成为某种上帝对象反模式,如 this question 中讨论的那样。用数据库术语:Account --> Company 有一个外键。在实际应用中,几乎所有东西都归公司所有,出于性能原因,我不想让懒惰/急切地加载公司的所有子集合。

我想最终的图表可能会有一个IAccountRepository(见下图),但我发现将所有内容放在那里会给类图带来负担。想象一下为每个子集合添加额外的 infrastructure 类。类图将变得不可读!

您如何在领域模型中传达想法,即加载将是“间接的”?它甚至去那里吗?

对此有任何参考或行业标准吗?

谢谢。

【问题讨论】:

    标签: domain-driven-design uml


    【解决方案1】:

    您将行为建模与静态模型混合在一起。如果Company never 直接访问Account,您在CompanyAccount 之间设置的关系是可以的,但是如果您在Company 中有访问Account 的函数,那么您的模型错了。

    据我所知,无法模拟一方面CompanyAccounts 组成,但帐户实际上存储在另一个地方。你的第二张图不正确,因为如果CompanyAccounts 组成,那么IAccountRepository 应该通过Company 而不是直接访问它们。

    恕我直言,Account 应该具有从IAccountRepositoryAccount 的组合,从CompanyAccount 的关联,并且在ICompanyRepository.deleteCompany 的序列图中,当一个公司被删除时,它的所有帐户被删除。

    【讨论】:

    • 谢谢。我试图通过存储库传达的是应用程序将能够直接加载CompanyAccount。帐户属于一家公司,它是数据库中的 NOT NULL Foreign Key 约束,但我不想每次需要 Account ID ABC 时都通过公司访问它们...我确定我理解您所说的“帐户应该有从 IAccountRepository 到 Account 的组合”,IAccountRepository 不是 Account 的所有者,不是吗?
    • 在类图中显示您想要的内容是有问题的。我看到的唯一选择是删除您拥有的组合链接中的X,并在此链接中添加一条评论,说明这些帐户是从IAccountRepository 获取的,而不是直接从Company 获取的
    猜你喜欢
    • 2017-04-18
    • 2016-07-14
    • 2021-12-16
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2015-01-06
    相关资源
    最近更新 更多