次の単純化されたシナリオを検討してください。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
// restricted
public string SocialSecurityNumber { get; set; }
// restricted
public string MothersMaidenName { get; set; }
}
したがって、アプリケーションでは、多くのユーザーがPerson
データを表示できます。一部のユーザーはすべてを表示できます。他のユーザーは と のみName
を表示できますAge
。
UI に許可されたデータのみを表示することは、クライアント側では十分に簡単ですが、そのデータをクライアントに送信することさえ本当にしたくありません。
私はこれを達成するために、FullPerson : BasicPerson
階層 (table-per-class-hierarchy) を作成しようとしました。目的の型を取得するために a の 2 つの実装を使用StaffRepository
しましたが、NH プロキシが原因で実行時に必要なキャストが失敗します。もちろん、RDBMS では、テーブル内の任意の行がaまたは aPeople
を表すことができ、両方に同じ識別子値を指定しても機能しません。FullPerson
BasicPerson
マッピングのみを検討し、結果トランスフォーマーをFullPerson
使用して にフィルターダウンすることを検討しましたが、これは一方通行であることを理解していますが、エンティティ管理と遅延読み込みの利点を最大限に活用したい (上記の例にはコレクションは含まれていません)。セッション。AliasToBean
BasicPerson
もう 1 つの考えは、制限されたすべてのフィールドをクラスにまとめて、これをプロパティとして追加することでした。このアプローチに関する私の懸念はいくつかあります。
- それは私のドメインモデルを危険にさらし、
- 遅延ロードするには、プロパティをコレクション (常に 1) として宣言する必要があります。
- その怠惰なコレクションが読み込まれないようにする方法もわかりません。
これはすべて間違っていると感じます。望ましい結果を達成するための既知のアプローチはありますか?
説明:
これはイントラネット専用のデスクトップ アプリケーションです。セッションはクライアント上にあります。確かに中間サービス層を作成することはできますが、遅延読み込みと変更追跡を断念する必要があり、それを維持したいと考えています。