我想听到下面的一些建议和意见:动态扩展的类
比方说,你有一些实体:NewsPiece,博文,文章
一般情况下是非常相似的对方,所以我做了一个泛型类
public abstract class InformationItem<TParent, TChild, TLike>
where TParent : InformationItem<TParent, TChild, TLike>
where TChild : InformationItemChild<TParent, TChild, TLike>
where TLike : InformationItemLike<TParent, TChild, TLike>
{
[Key]
public int Id { get; set; }
protected ICollection<TChild> childItems;
public virtual ICollection<TChild> ChildItems
{
get { return childItems ?? (childItems = new List<TChild>()); }
protected set { childItems = value; }
}
//and so on...
}
类似的定义是在儿童和类一样,所以我才能够定义BaseInformationService,并以此为基础实现了我的信息项的所有操作(创建,编辑,发表评论,得到最近的等等...)。
但最近我遇到了一个问题 - 这样的强制执行派生类的结构,使得不需要评论(例如)有不必要的功能类。所以我决定让这个实现更灵活一点 - 我想要有一些像InformationItemServiceBuilder那样的方法,例如.WithComments或.WithLikes,它们只能用所需的功能构建信息项服务。
你建议哪一种方法或设计模式?我应该尝试装饰,还是其他更适合?预先感谢您的回复。
听起来不错,我会试一试 – HardLuck 2013-04-29 17:01:03
所以,我试图使用这个,但这不是我所需要的 - 它只允许动态对象适用于接口实现者,但这不是重点。任何其他想法? – HardLuck 2013-05-04 00:37:39
@HardLuck - 我相信你误解了这些库的局限性。 Clay上的文章展示了如何动态构建深度对象图(支持评论等)。然而,总的来说,我认为你的解决方案有点过度设计,你最好创建一个从最小非泛型基类派生的具体类。然后,您可以通过ORM配置隐式处理子类型的变体......但这就是我将如何处理它。 – smartcaveman 2013-05-05 02:24:59