如果“Utilities”类是邪恶的,我在哪里放置我的通用代码?

时间:2010-07-27 00:26:21

标签: c# oop global-variables utility-method

我通常遵循全局变量/函数是邪恶的规则,并且每一段代码都应该存在于它所属的类中。

这是一个非常容易遵循的规则,我相信到目前为止我还没有遇到过这条规则的问题。

但是,今天我需要在程序集中添加一个函数,而不是添加到特定的类。也就是说,我的几乎所有类都可以使用这个特定的函数。

我应该在哪里放置此功能(+1重载)?

如果我把它放在“公用事业”课程中,我会觉得很脏。如果我将它添加到一个半相关的类,并让其他类直接调用它,我感觉更糟。

这段特殊代码基本上将IList<PointF>切换为规范化列表。我现在觉得在IList<PointF>上添加它作为扩展方法可能是最好的选择......

3 个答案:

答案 0 :(得分:29)

如果这是IList<PointF>上的操作,那么它应该是IList<PointF>上的扩展方法。

通常,应避免使用UtilsHelper类型类。通常情况下,您会发现您可能认为是一种实用工具方法,实际上是一种非常具体的方法,可能属于它自己的类(就像你说的那样)。但是,将存在特定于域的情况,其中Util - 类(将相关有用方法分组的类)作为有效实体。

答案 1 :(得分:12)

“全局”变量和方法没有错。你总是使用它们。该框架喜欢称它们为“静态”类或“静态”方法。

我很少需要,但我通常在命名空间中添加一个内部静态类Util,C#需要方法/变量,VB.NET需要一个模块。

.NET Framework中的示例

  • System.Collections.Specialized.CollectionsUtil
  • System.Net.WebUtility
  • 检查Microsoft的.NET Framework源代码。你会发现许多内部实用程序类。

答案 2 :(得分:4)

当然,你应该把它放到'ListUtilities'或PointListUtilities课程中。那么你就没有违反单一责任原则,这是一个全能型“公用事业”课程的主要问题。