繁体   English   中英

了解如何 model UML 类/数据库

[英]Understanding how to model UML Class/Database

我对设计一个与数据库集成的客户端软件感到困惑,该软件应该是 class 的成员变量,或者只是对数据库的查询。 让我用一个简单的例子来具体说明:

比方说,如果我有一个Student class,它有一个作为Student对象的“朋友”列表。 我的软件设计是否应该有一个ArrayList<Student>作为Student class 的成员变量,或者数据库应该处理关系本身并且Student class 不考虑那些“朋友”? 在这种情况下,正确的 UML 类图应该如何?

你需要在关系数据库和 object model 中建立一对多的Student和朋友关系。

这个问题比你想象的要广泛,因为有很多方法可以解决它。 这里有一些初步想法:

让我们从快速的 class 图开始。 同学之间的友谊是多对多的关联。
带有学生班级和与自身关联的图表

在数据库中,多对多关联通常使用关联表来实现 因此,您将有两个表: STUDENTS和 FRIENDSHIPS,其中包含成对的好友 ID: 与双外键约束相关的两个表

要从数据库中加载Student object,您需要读取STUDENTS行中的数据并使用它来初始化您的 object。对于友谊,您必须读取相关的FRIENDSHIPS行。

但是如何在应用程序中使用这些表呢?

  • 第一种可能性是加载每个Student朋友并将其插入ArrayList<Student> 但是每个加载的学生就像第一个学生,并且可能有自己的朋友,您也必须加载这些朋友,您最终会加载很多学生,如果不是全部的话。 只是为了得到你感兴趣的那一个。
  • 第二种可能性是使用ArrayList<StudentId>而不是ArrayList<Student>并填充它。 然后你会及时加载朋友,只有在需要的时候。 但这需要在您的应用程序中进行一些更重要的更改。
  • 第三种可能性是不公开ArrayList 不泄露内部总是一个好主意。 而是使用吸气剂。 因此,只有在调用student.getFriends()时才加载朋友。 这是一种方便的方法,因为您可以随意使用一组朋友,但要避免陷入朋友的朋友的递归加载中。

在所有情况下,您可能有兴趣使用存储库object 来获取学生个人或 collections,并封装数据库处理。

建议:如前所述,还有更多选择,存储库是一种方法,但也有活动记录、表网关和其他方法。 要获得完整的概述,您可能对 Martin Fowler 的书Patterns of Enterprise Application Architecture感兴趣

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM