Я переосмысливаю текущий сервис 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);
}
}
Это хороший подход? Мне нравится идея кэширования провайдеров, мне она кажется более эффективной ... хотя иногда я склонен упускать из виду очевидное. Дайте мне знать ваши мысли!