我应该如何在 MVC 中制作 Class 图?

How should I make a Class Diagram in MVC?

这是我的 class图表:

在我看来(因为没有下一个就无法运行):

我认为我对 UML 关系的理解是错误的。

在 MVC 中制作 class 图的正确方法是什么?

术语和语义

如果 classes 在没有另一个的情况下无法运行,则有一个 dependency。依赖绝对不意味着组合。

在面向对象编程中,我们经常提到组合,意思是object composition。这种关系比简单的依赖关系更强。这意味着 class 的每个对象可能需要知道另一个 class 的对象。在 UML 中,我们用 UML 关联表示它。

在某些情况下,对象之间的link更强,并且可能具有UML聚合或UML组合语义。但这并不是因为您组合对象,所以有 UML 组合。相同的术语,不同的含义(关于使用 UML 关联和组合以及避免 UML 聚合的更多建议:)。

在 MVC 中,Controller 与 Views 和 Model 相关联,每个 Views 也与 Model 相关联。没有UML组合。

符号

您不能用包组成 class。包描述命名空间并且可以嵌套。它们可以包含其他 UML 元素。但是它们不能 associated/aggregated/composed 和 classes.

您要找的似乎是component diagram:组件可以嵌套,并通过接口与其他组件关联。并且一个组件可以包含 classes.

图表内容

DDD 域模型和 MVC 模型之间似乎有点混淆。尽管是同一个词,但两个概念是不同的。

MVC中,模型管理知识,即领域模型和应对领域模型所需的一切:

  • UserTransferTax属于DDD领域entities/aggregates,属于MVC模型
  • 所有需要坚持这个知识的东西,比如UserRepositoryTransferRepositoryTaxRepository也属于MVC模式。如果您使用另一种持久性方法(例如 table 网关或活动对象),您将没有存储库,而是其他对象。

MVC 控制器处理用户输入,并将命令发送到视图和模型。它不是域对象的重复。

观点在哪里?你们服务的目的是什么?

  • 它们是域服务吗,即涉及多个聚合并且自然不属于其中任何一个的操作?
  • 它们是应用程序的服务层,意味着 link 它与外界联系吗?