繁体   English   中英

静态类设计?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM