Oop 面向对象:类A和类B是相互依赖的。这个设计好吗?

Oop 面向对象:类A和类B是相互依赖的。这个设计好吗?,oop,uml,Oop,Uml,我读过一些UML类图。我看到一些UML设计是这样的: 例如:有两个班级:班级学生和班级成绩单。每个学生都有一份成绩单,每个成绩单都和一个学生在一起。所以,班级学生和班级成绩单是靠在一起的。那么,这是一门很好的设计课吗 如果没有,我们如何解决这个问题。如果可以的话,我怎样才能很好地实现这个关系呢 谢谢:)您可能应该考虑的是适航性。听起来这种关系是完全合适的,但是,你是否需要从成绩单导航到学生?如果不是,您的关系不是双向的,成绩单不再依赖于学生。您是否总是先查找学生,然后再查找成绩单 老实说,我不会

我读过一些UML类图。我看到一些UML设计是这样的:

例如:有两个班级:班级学生和班级成绩单。每个学生都有一份成绩单,每个成绩单都和一个学生在一起。所以,班级学生和班级成绩单是靠在一起的。那么,这是一门很好的设计课吗

如果没有,我们如何解决这个问题。如果可以的话,我怎样才能很好地实现这个关系呢


谢谢:)

您可能应该考虑的是适航性。听起来这种关系是完全合适的,但是,你是否需要从
成绩单
导航到
学生
?如果不是,您的关系不是双向的,
成绩单
不再依赖于
学生
。您是否总是先查找
学生
,然后再查找
成绩单


老实说,我不会太担心的。如果它对你有用,那就去吧

我不会说这是一个很好的设计:显然,你希望
student.transcript.student==student
transcript.student.transcript==transcript
在任何时候都是真的,对吗?但是没有成绩单的学生呢?没有学生的成绩单?如果这些被禁止,你可能会在一个有趣的情况下结束:你必须同时创建相应的
学生
成绩单

嗯,在数据库领域,这通常由三个表建模(可能与实际的物理表直接对应,也可能与实际的物理表不直接对应):

UNIQUE
约束确保,如果你录取了学生,拿到了学生的成绩单,拿到了成绩单上的学生,你就回到了最初的学生;
成绩单->学生->成绩单
导航也是如此

在OOP世界中,您可能会有某种
StudentTranscriptDispatcher
,其中包含
List
,以及将
Student
转换为
Transcript
并返回的方法


然而,这种双向关系是。。。不寻常。它基本上是把一个大的物体切成两半,但仍然把两半紧紧地绑在一起。你为什么要这样做?相反,它没有消除任何复杂性:它引入了新的人工复杂性,这在以前是不存在的。

是的,在数据库设计方面你是对的。然而,对于OO设计来说,情况并非如此。我想说,有一个独特的学生和成绩单对象可能是一个有效的设计。是的,但通常不会有成绩单指向学生:我怀疑是否有任何成绩单特定的方法取决于学生。引入依赖项不仅仅是为了将程序缝合在一起。
TABLE Student ( studentId ID PRIMARY KEY, ... )

TABLE Transcript ( transcriptId ID PRIMARY KEY, ... )

TABLE StudentTranscriptLink (
    studentId ID NOT NULL UNIQUE REFERENCES Student(studentId),
    transcriptID Id NOT NULL UNIQUE REFERENCES Transcript(transcriptId)
) PRIMARY KEY ( studentId, transcriptId )