我一直在读,通过在代码中使用静态类/单例来创建依赖关系是不好的形式,并且会产生一些问题,比如紧密耦合和单元测试。
在这种情况下,我有一组url解析方法,这些方法没有关联的状态,并且只使用方法的输入参数执行操作。我相信你对这种方法很熟悉。
在过去,我会创建一个类并添加这些方法,然后直接从我的代码中调用它们。

UrlParser.ParseUrl(url);

但请稍等,这将向另一个类引入依赖项。我不确定这些“实用程序”类是否是坏的,因为它们是无状态的,这将最小化所述静态类和单例类的一些问题。有人能澄清一下吗?
如果我将方法移动到调用类,也就是说,只有调用类将使用该方法。这可能违反“单一责任原则”。

最佳答案

从理论设计的角度来看,我觉得在可能的情况下应该避免使用实用类。它们基本上与静态类没有什么不同(尽管稍微好一点,因为它们没有状态)。
然而,从实际的角度来看,我确实创造了这些,并鼓励在适当的时候使用它们。试图避免使用实用程序类通常很麻烦,并且会导致代码的可维护性降低。但是,我确实鼓励我的开发人员尽可能避免在公共api中使用这些方法。
例如,在您的例子中,我觉得urlparser.parseurl(…)作为一个类处理可能更好。看看bcl中的System.Uri-它为统一资源标识符处理一个干净、易于使用的接口,工作良好,并保持实际状态。我更喜欢这种方法,而不是在字符串上工作的实用方法,强制用户传递字符串,记住要验证它,等等。

10-05 23:33