假设我的模型中有多个实体(使用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()
吗?