0

UMLクラス図を読みました。私はいくつかのUMLデザインをこのように見ています:

例:クラスStudentとクラスTranscriptの2つのクラスがあります。すべての生徒には成績証明書があり、すべての成績証明書は生徒と一緒にいます。したがって、クラスの学生とクラスのトランスクリプトは一緒に依存しています。それで、これはうまく設計されたクラスですか?

そうでない場合は、どうすればこれを修正できますか。そして、これで問題がなければ、どうすればこの関係をうまく実装できますか?

ありがとう :)

4

2 に答える 2

1

私はそれが非常に良いデザインだとは言いません:どうやら、あなたはいつでも真実でありたいstudent.transcript.student == studentと思っていますよね?transcript.student.transcript == transcriptしかし、成績証明書のない学生はどうですか?学生のいない成績証明書?それらが禁止されている場合、あなたは面白い状況で終わるかもしれません:あなたは対応するStudentTranscript同時に作成しなければならないでしょう!

データベース領域では、これは通常3つのテーブルでモデル化されます(実際の物理テーブルに直接対応する場合と対応しない場合があります)。

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 )

UNIQUE制約により、Studentを取得し、そのトランスクリプトを取得し、そのトランスクリプトのStudentを取得すると、最初に使用した元のStudentに戻ることが保証されます。Transcript->Student->Transcriptナビゲーションについても同じことが言えます。

OOPの世界では、おそらく内部に何らかの種類がありStudentTranscriptDispatcher、向きを変えたり戻したりする方法があります。List<Pair<Student, Transcript>>StudentTranscript

しかし、そのような双方向の関係は...珍しいものです。基本的には、1つの大きなオブジェクトを2つにスライスしますが、それでもこれらの半分を非常に緊密に結び付けたままにします。なぜあなたはこれをしますか?それどころか、複雑さを取り除くことはありません。以前にはなかった新しい人工的な複雑さをもたらします。

于 2012-11-12T11:41:07.860 に答える
0

ここでおそらく考えるべきことは、ナビゲーション性です。関係は完全に適切であるように思えますが、からに移動する必要がありますTranscriptStudent?そうでない場合、関係は双方向でTranscriptはなく、に依存しなくなりStudentます。あなたはいつもStudent最初にそして次に見つけますTranscriptか?

正直、あまり気になりません。それがあなたのために働くなら-それで行きなさい!

于 2012-11-12T08:34:27.523 に答える