考虑以下情况:
可以有Categories
;Children
源自Categories
; 在某处,必须有一个看起来像这样的方法:
ChildType[] Get(ParentType parent) { ... }
ChildType
不是派生自ParentType
; 它们之所以如此命名,是因为该方法是一种工厂方法,用于根据父项的 ID 获取子项。
目前我有一些看起来像这样的东西:
static class CatFactory<ChildType, ParentType> : Category
where ParentType: Category
where ChildType: Category, new()
{
public static ChildType[] Get(string catname, ParentType parent)
{
// ...
}
}
class ParentCategoryA : Category { }
class ParentCategoryB: Category { }
class ChildCategoryA: Category { }
class ChildCategoryB: Category { }
然后我会这样称呼工厂:
CatFactory<ChildCategoryA, ParentCategoryA>.Get(someparent);
这样做的目的是 - 给定一些具有 ID 的强类型父实例,转到具有该 ID 的 Web 服务,然后反序列化一个新的子实例。
这在我嘴里留下了不好的味道。在我看来,ChildCategoryA
应该知道它的父级是ParentCategoryA
,并且应该能够调用ChildCategoryA.Get(someparent)
。这当然可以通过static Get()
为孩子的每个实现定义一个来实现,但这需要大量的重复代码。
那么 - 最好的方法是什么?单独的工厂类,还是没有?