如何处理全局字符串常量ASP.NET MVC

时间:2010-12-11 16:02:13

标签: .net architecture

我有一个新的MVC 3项目,在其中我使用模型注释,如:

[DisplayFormat(NullDisplayText = "[Not set]")]

我更喜欢使用以下内容避免重复字符串文字:

[DisplayFormat(NullDisplayText =  GlobalStrings.Nulls.DefaultNullText)]

其中:

public struct GlobalStrings
{
    public struct Nulls
    {
        public const string DefaultNullText = "[Not set]";
    }
}

但我不禁觉得有更好的办法吗?

1 个答案:

答案 0 :(得分:6)

你所做的并不是一件非常糟糕的事情 - 你在一个容易改变的地方分享你的常数,这是一个非常好的主意。

如果这个地方的字符串是真正全局的(在整个程序的许多位置使用),使用单个GlobalStrings结构也不是一个好主意。但通常情况并非如此(除了真正的全局文本,例如ApplicationName和Publisher)。

字符串通常可能用于应用程序的更本地化部分(例如子系统)。您可以考虑仅为该子系统使用另一个simlar结构作为“全局”。如果仅在一个类或类的层次结构中需要字符串,则考虑将它们放在基类中。如果将每个“全局”字符串放入与其最相关的类中,则有助于将常量分类并将其与适用的区域相关联。因此,如果“默认空文本”实际上仅适用于通过“DataAccess”类和该类用户检索的数据,则考虑将其添加为DataAccess类的公共const / property,以便该类的客户端可以访问作为DataAccess.DefaultNullString的“全局” - 这使得其他程序员更清楚该常量的用法是什么。

通过在一个类中包含常量,它们在技术上仍然可以“全局”使用,但在邪恶意义上不是“全局”(“这里是一个常数,但我不知道它在程序中的适用位置”)

你会发现,如果你以这种方式将常量嵌入到不同的类/子系统中,你的GlobalStrings结构将变得非常小甚至是空的。