the*_*rrs 12 c# static class utility
我一直在阅读通过在代码中使用静态类/单例来创建依赖关系,这是一种糟糕的形式,并产生问题,即.紧耦合和单元测试.
我有一种情况,我有一组url解析方法,没有与之关联的状态,并仅使用方法的输入参数执行操作.我相信你熟悉这种方法.
在过去,我会继续创建一个类并添加这些方法,并直接从我的代码中调用它们,例如.
UrlParser.ParseUrl(url);
Run Code Online (Sandbox Code Playgroud)
但是等一下,就是将依赖引入另一个类.我不确定这些"实用"类是否是坏的,因为它们是无状态的,这最小化了所述静态类和单例的一些问题.有人可以澄清一下吗?
我应该将方法移动到调用类,即只有调用类将使用该方法.这可能违反了"单一责任原则".
从理论设计的角度来看,我觉得在可能的情况下,实用程序类是可以避免的.它们基本上与静态类没有什么不同(虽然稍微好一点,因为它们没有状态).
然而,从实际的角度来看,我确实创造了这些,并鼓励在适当的时候使用它们.试图避免实用程序类通常很麻烦,并导致代码维护较少.但是,我确实鼓励我的开发人员在可能的情况下在公共API中避免这些.
例如,在您的情况下,我觉得UrlParser.ParseUrl(...)可能更好地作为一个类处理.查看BCL 中的System.Uri - 它为统一资源标识符处理一个干净,易于使用的界面,该界面运行良好,并保持实际状态.我更喜欢这种方法,一种适用于字符串的实用程序方法,并强制用户传递一个字符串,记得验证它,等等.