我目前正在为应该像'Duolingo'的应用程序制作UML类图。
我正在努力建立多对多关系的模型。因此,我想您有许多用户可以参加许多课程(他们希望学习的不同语言)。因此,我决定创建一个courseProgress类来对这种多对多关系进行建模。
我想知道的是,我需要将userID和courseID存储在courseProgress类中吗?我想我对如何在数据库中使用密钥感到困惑。
请参见下图:
我在正确的轨道上吗?
[此外,我想知道您究竟何时使用私有和公共字段。因为在我看来,您似乎总是希望所有字段都是私有的,而只是使用getter和setter来始终访问这些字段?
上图中的N.B,这些字段是公共的,因为我尚未将其更改为私有
在上图中,我应该具有userID字段和courseID字段,还是应该具有User类型的用户字段和Course类型的Course字段?
您确实在正确的轨道上。附加的类CourseProgress
可帮助您更好地表示User
和Course
之间的多对多关联。另一种选择是使用association class。
公共属性,受保护属性或私有属性之间的选择取决于您的类设计以及您希望如何在对象模型中公开此信息。这个范围太广了,在这里无法解释。为简化起见,如果属性是可以被其他对象更改而没有任何后果的数据,则可以将其公开。但是,如果某些属性只能根据某些带有前提条件,不变条件或后置条件的规则进行更改,则最好通过一种方法控制更改,从而使属性受保护或私有。
是否指示相关类的标识符(即courseId
,UserId
)取决于您的图表目的。
通常,对于域模型或设计模型,您wouldn't add用于表示与您关联的类的属性。这是关联的实现细节。通常,您宁愿使用association end来指示如何调用相关类的实例。
对于实现模型(例如one-to-many或many-to-many的示例),您可能希望显示此详细信息以允许与数据库表进行明确的映射。