[英]static Class Design?
我想知道这是不是很好的做法,我不确定这个类是否应该是静态类?
public class SettingsHelper
{
public static readonly string MinVal= "MinVal";
public static readonly string MinPartners = "MinPartners";
public static IDictionary<string, string> GetSettings(string jsonsettings)
{
var settings = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonsettings);
return settings;
}
public string SettingsToJson(IDictionary<string, string> settings)
{
var jsonsettings = JsonConvert.SerializeObject(settings);
return jsonsettings;
}
public static decimal GetMinPartners(string jsonsettings)
{
var settings = GetSettings(jsonsettings);
string partners;
settings.TryGetValue(MinPartners, out partners);
return decimal.Parse(partners);
}
public static int GetMinValue(string jsonsettings)
{
var settings = GetSettings(jsonsettings);
string pival;
settings.TryGetValue(MinVal, out pival);
return int.Parse(pival);
}
}
我想包含诸如更新合作伙伴,添加合作伙伴等方法。
让它静止没有任何好处? 它可以在任何需要的地方实例化它。
我会将它命名为ConfigurationRepository
。 它更好地描述了意图。 此外,我会将序列化移至第二类,以保持责任明确。
我建议尽可能避免使用静力学。 -它使您的代码不可测试。 您不能在测试用例中切换到其他版本。 再次测试诸如mockito之类的框架并不能很好地支持静态。
如果,静态类有意义
-您所有的方法都是静态的
-您在类中没有任何全局状态。
-您不修改任何成员变量。
-您的所有功能本质上都是“助手”。
- 你的类没有创建一系列其他静态类。
至于Thread-safety,因为你的类没有修改任何全局状态(任何成员变量),所以它是线程安全的。
它需要是一个静态类,更不用说如果类中的所有函数都是静态的......在类中是否存在依赖于对象标识的数据或行为?
我假设“静态类”是指仅具有静态方法的类。
使用静态方法的理由很少。 也许你需要实现一个真正的Singleton(如果它存在两次就会试图杀死你)。 但这似乎并非如此。
静态方法有一些可以接受的原因,例如
这些可能适用于您的情况。 =>这样设计就可以了。
也许合适的类(或者每个方法一个类)可能会更好。
您的方法/类的客户端将在构造函数中获取一个实例,可能使用默认构造函数创建正常实例。
以下是您将获得的:
在测试客户端时,您可以轻松地使用模拟提供罐装答案,您不需要使用有效的json字符串。 如果客户端本身不创建这些字符串,则可以防止在json字符串结构发生更改时与测试中的实际类无关的大量故障。
有些日子,某些信息来自xml,数据库或占卜,特别是当客户端进行区分而不是信息类型时,它很容易切换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.