単純な構成関係をモデル化するにはどうすればよいですか
-
18-09-2019 - |
質問
誰かが構成関係をモデル化する最適な方法を理解するのを手伝ってくれますか?
たとえば、多くのスケジュールを設定できる生徒がいる場合、私は大まかに次のように作成します。
class Student
{
prop long Pk { get; set; }
prop string Name { get; set; }
prop List<Schedule> Schedules { get; set; }
}
class Schedule
{
prop string Semester { get; set; }
prop List<Course> Courses{ get; set; }
}
いつか、Schedule オブジェクトがあり、それがどの生徒に属しているかを識別したいと思うでしょう。書けるようになりたい Schedule.Student.Name
, 、学生の名前を返します。Student プロパティも Schedule オブジェクトに追加しますか?
私のアプリケーションは、CRUD 機能を実行するために Student Pk を Schedule オブジェクトに渡しています。必要に応じてハンドルを保持できるように、Student PK をプライベート変数として保持しています。
アプリケーションが複雑になるにつれて、これまで行ってきたことを維持するのが難しくなってきています。私に何か提案はありますか?これらの基本を復習し、より適切に対処するには、他に何を参照すればよいでしょうか (書籍/リンク)。
解決
「Schedule.Student.Name と書いて、学生の名前を返せるようにしたいです。Student プロパティも Schedule オブジェクトに追加しますか?」 はい。
あなたが説明していること(ルックアップのための外部キーとオブジェクトグラフの簡単なナビゲーションのためのオブジェクト参照の両方をサポート)は、オブジェクトリレーショナルマッパー(ORM)に非常によく一致しているように思えます。優れた ORM は、FK/PK を使用して、関連するオブジェクトを自動的にロードします (例:スケジュールに StudentPK フィールドがある場合、マッパーが Student プロパティのロード/マッピングを処理します)。このタイプの製品は数多くあります。などの組み込みの .NET フレームワークを使用できます。 エンティティフレームワーク, 、オープンソースのものなど NHibernate または次のような市販品 ライトスピード, LLBLGen, エンティティスペース または オープンアクセス (開示:私は商用 ORM を作成する会社で働いています)。私が説明している種類の概要については、Google で ORM またはオブジェクト リレーショナル マッパーを検索するか、Wikipedia を確認してください。