私が取り組んでいるプロジェクトでは、n 層アーキテクチャを使用しています。レイヤーは次のとおりです。
- データアクセス
- ビジネスの論理
- 事業体
- プレゼンテーション
ビジネス ロジックはデータ アクセス層を呼び出し、プレゼンテーション層はビジネス ロジック層を呼び出し、ビジネス エンティティはそれらすべてによって参照されます。
私たちのビジネス エンティティは、基本的にデータ モデル 1-1 と一致します。すべてのテーブルにクラスがあります。フレームワークが設計された当初、主従関係や親子関係を管理することは考慮されていませんでした。したがって、すべてのビジネス ロジック、データ アクセス、およびビジネス エンティティは、データベース内の 1 つのテーブルのみを参照していました。アプリケーションの開発を開始するとすぐに、オブジェクト モデルにこれらのリレーションシップがないことが深刻な問題であることが明らかになりました。
すべてのレイヤー (データベースを含む) はすべて、社内開発のコード ジェネレーターを駆動するために使用する社内のメタデータ データベースから生成されます。
問題は、エンティティの関係をロードまたは遅延ロードする最良の方法は何かということです。たとえば、アドレス テーブルに対してマスターと子の関係を持つ person クラスがあるとします。これは、Person オブジェクトの Addresses のコレクション プロパティとしてビジネス エンティティに表示されます。1 対 1 の関係がある場合、これは単一のエンティティ プロパティとして表示されます。関係オブジェクトを埋めて保存するための最良の方法は何ですか? ビジネス エンティティはビジネス ロジック レイヤーを認識していないため、プロパティが呼び出されたときに内部的に実行することはできません。
これを行うための標準的なパターンがいくつかあると確信しています。助言がありますか?
また、1 つの注意点は、DataAcess レイヤーがリフレクションを使用してエンティティを構築することです。ストアド プロシージャは、1 つのテーブルに基づいて 1 つの結果セルトを返し、リフレクションを使用して、プロパティの名前を列の名前と照合することで、ビジネス オブジェクトを設定します。したがって、結合を行うのは難しいでしょう。