モデルに(EFを使用して)さまざまなエンティティがあるとします(ユーザー、製品、請求書、注文など)。
エンティティが事前に決定されたセットに属しているアプリケーションでエンティティオブジェクトの要約を印刷できるユーザーコントロールを作成しています。この場合、ユーザーと製品の要約を要約できると言います。
要約にはすべてIDと説明しか含まれないため、このための簡単なインターフェースを作成します。
public interface ISummarizableEntity {
public string ID { get; }
public string Description { get; }
}
次に、問題のエンティティについて、このインターフェイスを実装する部分クラスを作成します。
public partial class User : ISummarizableEntity
{
public string ID
{
get{ return UserID.ToString(); }
}
public string Description
{
get{ return String.Format("{0} {1} is from {2} and is {3} years old", FirstName, LastName, Country, Age); }
}
}
public partial class Product: ISummarizableEntity
{
public string ID
{
get{ return ProductID.ToString(); }
}
public string Description
{
get{ return String.Format("{0} weighs {1}{2} and belongs in the {3} department", ProductName, WeightValue, WeightUnit, Department); }
}
}
このようにして、ユーザーコントロール/部分ビューはISummarizableEntityの任意のコレクションにバインドでき、ソースにまったく関心を持つ必要がありません。インターフェイスをデータ型として使用するべきではないと言われましたが、それ以上の情報は得られませんでした。私の知る限りでは、インターフェイスは通常動作を説明しますが、プロパティはゲッター/セッターの構文上の砂糖であるため、プロパティを使用するだけではアンチパターンではありません。
具体的なデータ型を作成し、エンティティからそれにマッピングすることはできますが、メリットがわかりません。エンティティオブジェクトを抽象クラスから継承してプロパティを定義することもできますが、多重継承ができないため、エンティティをロックしてこれ以上使用できません。また、必要に応じて、オブジェクトをISummarizableEntityにすることもできます(明らかに、インターフェイスの名前を変更します)
私が心の中で使用しているソリューションは、保守、拡張、テストが可能で、かなり堅牢です。ここにアンチパターンが見えますか?
EntitySummary
と、User
そしてProduct
それぞれのようなメソッドを持つにはpublic EntitySummary GetSummary()
?