[英]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.