这是一个让我感到困惑的简单问题。
我有两个类和一个字典(为了示例而简化):
class Result {
public string Description;
}
class Error {
public int ErrorCode;
}
Dictionary<int, string> errorCodeToMessage = new Dictionary<int, string> {
{ 0, "Item not found" },
{ 1, "Connection error" }
}
在我继承的代码库中,我经常看到这一行:
Result result = new Result {
Description = errorCodeToMessage[error.ErrorCode];
}
我不希望全部使用字典,我希望将此逻辑封装在Result
对象或Error
对象中。
我考虑在Result
对象中创建一个新的构造函数,该构造函数将接受ErrorCode并在那里执行逻辑。但我不确定这是最好的方式。
你会怎么做?
答案 0 :(得分:0)
我不明白为什么你有单独的Result和Error类。如果两者都描述了一件事 - 一些事件的结果 - 那么它们应该被封装在一个代表它的对象中。然后你可以在该类中保持字典私有。
简单的解决方案 - 不同的想法。如果它看起来很难,那就把它移掉就可以了。
答案 1 :(得分:0)
在.NET中,您应该使用ResourceManager。这样,您就可以将所有可能的消息封装在它们所属的位置。
从本质上讲,使用在整个应用程序中提供消息的实体并没有错 - 因为它是Singleton的一个很好的例子。但是,您可以将消息分区到不同的容器中。一个简单的例子:
enum ErrorCode
{
SomethingIsWrong,
AnotherThingIsWrong,
UserIsAnIdiot
}
在ErrorCodes.resx
文件中:
<data name="SomethingIsWrong" xml:space="preserve">
<value>Something is wrong. Sorry!</value>
</data>
<data name="AnotherThingIsWrong" xml:space="preserve">
<value>Another thing is wrong. Sorry!</value>
</data>
<data name="UserIsAnIdiot" xml:space="preserve">
<value>You're an idiot! '{0:dd-MMM-yyyy}' is not a future date!</value>
</data>
你可以这样使用:
public void GetErrorMessage(ErrorCode errorCode)
{
//ErrorCodes is a class accompanying the ErrorCodes.resx file
var rm = new ResourceManager(typeof(ErrorCodes));
//or with a CultureInfo instance if you want localized messages
return rm.GetString(errorCode.ToString());
}
这个GetErrorMessage
方法将是某种单例,或者是在整个应用程序中使用的静态类。您可以在彼此之间分隔消息类型,将它们放入不同的resx文件中,这些文件将由VS生成的不同类包含。