現在使用している現在の WCF サービスを再考しています。さまざまなデータベースへの XML のロードを多数行っています。XML データとして格納できる場合もあれば、行セットとして格納する必要がある場合もあります。
そのため、このサービスを再設計して、さまざまなプロバイダーを受け入れるようにしています。私の最初の考えは、古典的な抽象工場でしたが、今は疑問に思っています。基本的に、サービス クラスには 1 つの操作コントラクト メソッド、Load があります。しかし、私には、Load が呼び出されるたびに新しいプロバイダー インスタンスを作成するのはばかげているように思えます。
現在:
// Obviously incomplete example:
public class XmlLoaderService : IXmlLoaderService
{
readonly IXmlLoaderFactory _xmlLoaderFactory;
readonly IXmlLoader _xmlLoader;
public XmlLoaderService()
{
_xmlLoader = _xmlLoaderFactory(ProviderConfiguration configuration);
}
public void Load(Request request)
{
_xmlLoader.Load(request);
}
}
次のように変更を考えています。
public class XmlLoaderService : IXmlLoaderService
{
static readonly IDictionary<int, IXmlLoader> _providerDictionary;
static public XmlLoaderService()
{
_providerDictionary = PopulateDictionaryFromConfig();
}
public void Load(Request request)
{
// Request will always supply an int that identifies the
// request type, can be used as key in provider dictionary
var xmlLoader = _providerDictionary[request.RequestType];
xmlLoader.Load(request);
}
}
これは良いアプローチですか?私はプロバイダーをキャッシュするというアイデアが好きで、より効率的だと思います...しかし、私は時々明白なことを見落としがちです。あなたの考えを聞かせてください!