我seen here那个静态类&静态函数很糟糕,因为它们占用了大量内存。
我将它用于许多需要与数据库等交互的东西。
静态本地化类的一部分示例,即GetResources
public static class SFLocalization
{
public static string GetResources(string key)
{
string CurrentLanguage = System.Threading.Thread.CurrentThread.CurrentUICulture.ToString();
if (MemoryCache.Default["Resources_" + key] == null)
{
string x
using (Db _db = new Db())
{
MemoryCache.Default["Resources_" + key] = _db.Languages.First(l => l.Key == key && l.LanguageCode == CurrentThread).Value;
}
}
return MemoryCache.Default["Resources_" + key];
}
}
然后在视图中,控制器等。我只是写这个来获得翻译的值
@SFLocalization.GetResources("NewsletterBoxTitle")
1。)那些情况下的静态类真的很糟糕吗?
2.。)替代方案是什么?也许依赖注入(ninject等..)?? (我在书中看到它Apress - Pro Asp.net Mvc 4
答案 0 :(得分:6)
静态类(或模块)通常是域或应用程序服务的替代品。将此服务公开为静态类通常很方便,因此可以从任何地方访问它 - 如果它是一个跨领域的问题,例如本地化,则尤其如此。
这种方法可以帮助您快速启动并运行,但它确实存在一些问题。能够随时随地访问该服务会鼓励编码不良,并且很容易导致意大利面条代码。静态模块也使得使用它们的类很难进行单元测试。随着项目规模的扩大,这些问题都将呈指数级增长 - 因此,尽快处理这些问题通常是一个好主意。
正如您在问题中提到的,依赖注入是确保类可以访问服务的一种方法,而不会使其成为静态/全局。