たとえば、次のことを考慮してください。
public interface IStaff
{
FullName name { get; set; }
EMailAddress email_address { get; set; }
SocialInsuranceId ssn { get; set; }
PositiveInt age { get; set; }
Address home_address { get; set; }
}
一部のユーザーの場合、ビューモデルはとのみを必要name
としemail_address
ます。ssn
他の人は、それらのプロパティに加えて、、age
およびを含むビューモデルを持っているかもしれませんhome_address
。ビューが取得する統計家もいるとしましょage
うhome_address
。
IStaffBasic
これで、これを、、IStaffDetails
およびインターフェイスの継承に分割してIStaffStats
、特定のビューモデルのAPIを適切なプロパティに制限することができます。
ただし、このエンティティがネットワークを介してデータサービスから取得される場合でも、追加の詳細が含まれているため、発生してはなりません。
したがって、 (A)これらのバージョンごとに完全に異なるエンティティタイプを作成し、タイプごとに多くの追加のほぼ重複するクエリ操作でサービスレイヤーAPIをいくらか汚染するか、
(B)常にStaff
エンティティを返す方が良いでしょうか? 1)サービスでの承認チェックに基づいて設定された除外プロパティを使用してサービスからそれらを返しnull
、(2)上記のようにビューモデル内で制限されたインターフェイスを使用するか、
(C)私が使用していない非常にエレガントなパターンまたはソリューションを使用します検討しましたが、それについてあなたは私に言うつもりです。
オプションAは、ビューモデルレベルではよりクリーンに見えますが、サービスAPIは厄介なものになります。オプションBは、サーバーでのエンティティの処理を複雑にするようですが、オープンクローズの原則をより適切に順守します。
考え?