0
我正在反思我們現在使用的當前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);
}
}
這是一個好辦法?我喜歡緩存提供商的想法,對我來說似乎更有效率......但是,我有時忽略這種顯而易見的做法。讓我知道你的想法!
謝謝,我假設您認爲在這種情況下緩存提供者是一個可行的選擇,所以我會接受爲最好的(儘管是唯一的)答案!謝謝! – Didaxis 2012-02-22 19:08:34