我通常遵循全局变量/函数是邪恶的规则,并且每一段代码都应该存在于它所属的类中。
这是一个非常容易遵循的规则,我相信到目前为止我还没有遇到过这条规则的问题。
但是,今天我需要在程序集中添加一个函数,而不是添加到特定的类。也就是说,我的几乎所有类都可以使用这个特定的函数。
我应该在哪里放置此功能(+1重载)?
如果我把它放在“公用事业”课程中,我会觉得很脏。如果我将它添加到一个半相关的类,并让其他类直接调用它,我感觉更糟。
这段特殊代码基本上将IList<PointF>
切换为规范化列表。我现在觉得在IList<PointF>
上添加它作为扩展方法可能是最好的选择......
答案 0 :(得分:29)
如果这是IList<PointF>
上的操作,那么它应该是IList<PointF>
上的扩展方法。
通常,应避免使用Utils
和Helper
类型类。通常情况下,您会发现您可能认为是一种实用工具方法,实际上是一种非常具体的方法,可能属于它自己的类(就像你说的那样)。但是,将存在特定于域的情况,其中Util
- 类(将相关有用方法分组的类)作为有效实体。
答案 1 :(得分:12)
“全局”变量和方法没有错。你总是使用它们。该框架喜欢称它们为“静态”类或“静态”方法。
我很少需要,但我通常在命名空间中添加一个内部静态类Util,C#需要方法/变量,VB.NET需要一个模块。
.NET Framework中的示例
System.Collections.Specialized.CollectionsUtil
System.Net.WebUtility
答案 2 :(得分:4)
当然,你应该把它放到'ListUtilities'或PointListUtilities
课程中。那么你就没有违反单一责任原则,这是一个全能型“公用事业”课程的主要问题。