0

私の会社は、Telerik の OpenAccess ORM を使用して新しいプロジェクトを開始しようとしています。これは私たちにとって新しい製品であり、データセット ベースのアプローチではなく、ORM をプロジェクトに初めて使用します。現在、データ層を構築する最善の方法について意見の相違があります。具体的には、プロジェクト用に単一の .rlinq ファイルとドメイン モデルを用意するか、特定の画面/モジュールに必要なテーブルとテーブルの列のみを含む画面/モジュールごとの .rlinq ファイルを用意する必要があります。後者を説明するには:

名、姓、ssn、生年月日、性別、婚姻状況のフィールドを持つ Person テーブルがあるとします。個人情報画面では、これらすべてのフィールドが必要なので、.rlinq ファイルのドメイン モデルにテーブル全体を含めます。別の画面 (別の .rlinq ファイルを使用) では、個人の姓と ssn のみが必要なので、その .rlinq ファイルの Person オブジェクトには姓と ssn のみが含まれます。

この方法の議論は、主に、特定の画面に必要なデータのみを選択する必要があり、それ以上は選択しないというものでした。現在のデータセット ベースのアプリケーションでは、これは理にかなっています。不要なテーブルやリレーションシップがあると、要求されていなくても不要なデータが読み込まれ、ネットワークの負荷がかかるという懸念も表明されています。これに対する議論は、ドメイン モデルを断片化し、不要な複雑さを導入しているというものでした。ORM の仕事の一部は、キャッシングと遅延読み込みを使用してデータ フェッチを管理することです。これについて合意に達することができず、決定的な情報を何らかの方法で見つけることができないため、StackOverflow コミュニティに助けを求めています!

重要な場合は、Windows フォーム ベースのイントラネット アプリを構築しており、データ レイヤーは WCF サービスの背後にあり、データベースには約 100 のテーブルがあります。

よろしくお願いします。

4

1 に答える 1

1

一般に、単一の RLINQ ファイルで構築された堅牢なドメイン モデルを持つことが最善です。その後、必要に応じてクエリを ScreenModels/DTO に投影することで、画面の問題を処理できます。

例えば

複数のプロパティを持つ person オブジェクトがあるとします。ただし、特定の画面で姓と名のみを返したいとします。

   var myUserDto = context.People
                          .First()
                          .Select( p => new UserDto { FirstName= p.FirstName, 
                                                      LastName=p.LastName });

この場合、OpenAccess は十分に賢く、姓名のみを照会します。画面が person オブジェクトで使用可能な別のプロパティを要求するようになった場合、dto と LINQ クエリを更新するだけで済みます。

また、 OpenAccess が提供するData Service Wizardを使用する場合は、OpenAccessContext ごとにサービスが作成されます。したがって、エンティティごとに RLINQ がある場合、エンティティごとにサービスが存在することになり、控えめに言っても、クライアントでこれを維持するのは面倒です。サービス層を手動でロールすると、明らかにここでもう少し制御できるようになりますが、どの OpenAccessContext が各ドメイン オブジェクトを処理するかを常に覚えておく必要があります。

参考までに、大規模なモデルの場合、 OpenAccess が提供する集約メタデータ ソースを調べると、大規模なモデルを管理しやすい部分に分割するのに役立つ場合があります。

お役に立てれば!:)

于 2011-06-23T18:36:40.810 に答える