我已阅读有关何时使用静态类以及何时建议使用实例类的帖子。但是,我的印象是我的下面的例子介于两者之间:
所以,我的问题是:我应该继续使用它作为静态还是使用单例概念更好?
public static class SubscriptionManager
{
private static Dictionary<string, string> Repository { get; set; }
static SubscriptionManager()
{
Repository = new Dictionary<string, string>();
}
public static void Subscribe(string key, string value)
{
if (Repository.ContainsKey(key))
Repository[key] = value;
else
Repository.Add(key, value);
}
public static void Unsubscribe(string key, string value)
{
if (Repository.ContainsKey(key))
Repository.Remove(key);
}
public static string GetSubscription(string key)
{
if (Repository.ContainsKey(key))
return Repository[key];
else
return "";
}
}
答案 0 :(得分:0)
请记住,大型静态类会占用大量内存,因此在不需要时请避免使用它们。 在这种情况下,我建议你去静态类。这种方式更好。
答案 1 :(得分:0)
您的示例提供了类似Repository的模式的显式实现,如果它是可扩展的,最终可能会证明更有价值。如果你把它作为一个静态类来实现的话,你现在就决定不应该这样做。
另一个可能有价值的实现的示例可能是使用.NET 4 ConcurrencyDictionary<TKey, TValue>
,因此代码可以在更高容量的并发场景中使用,因为Dictionary
类不是线程安全的。< / p>
你所建议的是非常YAGNI,这适用于大型项目的迭代,并且有一些计划,但除非你知道未来会怎样,为什么限制已编写代码的潜力?
我可能会从您的类生成一个接口来表示它的骨干(将实现与合同分开),并利用IoC容器让您的类的用户决定将哪种实现用于他们的场景。 / p>
当然,只有当您的项目相当小或者在项目之间共享代码时,这才有意义。祝你好运!