Я переосмысливаю текущую службу WCF, которую мы используем прямо сейчас. Мы МНОГО загружаем XML в различные базы данных. В некоторых случаях мы можем хранить их как XML-данные, а в других — как наборы строк.
Поэтому я переделываю эту услугу, чтобы принимать разных поставщиков. Моя первая мысль, классическая абстрактная фабрика, но теперь у меня есть сомнения. По сути, класс обслуживания имеет один метод контракта операции, 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);
}
}
Хороший ли это подход? Мне нравится идея кэширования провайдеров, она кажется мне более эффективной... хотя иногда я склонен упускать из виду очевидное. Позвольте мне знать ваши мысли!