次の状況を考慮してください。
ある可能性があります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()
ですが、大量の反復コードが必要になります。
だから-これを行うための最良の方法は何ですか?個別のファクトリクラス、またはいいえ?