UML Class 图 - 了解哪些字段是必需的以及何时需要 Public 字段

UML Class Diagrams - Understanding Which Fields are Necessary and When To Have Public Fields

我目前正在为一个应该类似于 'Duolingo'.

的应用程序制作 UML class 图

我正在努力研究如何为多对多关系建模。 所以,我想你有很多用户可以参加很多课程(他们希望学习的不同语言)。出于这个原因,我决定创建一个 courseProgress class 来模拟这种多对多关系。

我想知道的是,我需要在 courseProgress class 中存储 userID 和 courseID 吗?我想我在这里混淆了如何在数据库中使用键。

见下图:

我走的路对吗?

另外,我想知道您究竟什么时候会使用私有字段和 public 字段。因为在我看来,您似乎总是希望所有字段都是私有的,并且只使用 getter 和 setter 来始终访问这些字段?

N.B 上图中的字段是 public 因为我还没有将它们更改为 private

在上图中,我应该有 userID 字段和 courseID 字段,还是应该有 User 类型的用户字段和 Course 类型的课程字段?

你确实走在了正确的轨道上。额外的 class CourseProgress 可以帮助您更好地表示 UserCourse 之间的多对多关联。另一种可能是使用 association class

选择 public、受保护属性还是私有属性取决于您的 class 设计以及您希望如何在对象模型中公开此信息。这太宽泛了,无法在这里解释。为简化起见,如果属性是可以被其他对象更改而不会产生任何后果的数据,那么您可以让它 public。但是,如果某些属性只能根据某些规则进行更改,并保证有前提条件、不变量或 post 条件,则最好通过方法控制更改,从而使 属性 受到保护或私人。

是否指示关联 class 的标识符(即 courseIdUserId)取决于图表的用途。

通常,对于域模型或设计模型,您 wouldn't add the properties for representing the classes you are associated with. This is an implementation detail of the association. Usually, you'd rather use the association end 指示如何调用相关 class 的实例。

对于实施模型(one-to-many or many-to-many 的示例),您可能希望显示此详细信息以允许与数据库表的明确映射。