【问题标题】:Alternative to libraries of static classes替代静态类库
【发布时间】:2010-09-16 03:47:31
【问题描述】:

我有大量包含非常通用的静态方法的静态“实用程序”类。例如,我有一个 CollectionUtility 类,它有一些有用的方法,例如:

public static void RemoveDuplicates(ICollection collection)...等

在 C# 3.0 中,我一直在将这些转换为扩展方法。

现在,我听说在“企业级”应用程序中,通常认为最好的做法是避免使用包含这些静态类和方法的大型库。我想它可能会很难维护。

对于那些为大公司从事大型企业项目的人来说一个问题 - 您是否维护此类实用程序类库?你呢?

【问题讨论】:

  • 请用语言标记语言特定的问题。
  • 吹毛求疵:没有“C# 3.5”这样的东西。请参考“C# 3.0”或“.NET 3.5”或两者。

标签: c# class static


【解决方案1】:

我听过一些谈话,在“企业级”应用程序中,通常认为最好的做法是避免使用包含这些静态类和方法的大型库。我想它可能会很难维护。

恕我直言,您应该应用泛型之类的东西来减少实用方法/库的大小,如果您只在一个地方使用实用方法,那么它不属于共享库,但最后当天你仍然可能有很多。

无论如何,这让我感到困惑。如果您没有将它们放在共享库中,您会将它们放在哪里?复制/粘贴到每个项目或类似的东西中?

【讨论】:

    【解决方案2】:

    您说的是共享库内容的代码。静态方法确实在共享库中占有一席之地。查看 System.Linq.Enumerable

    我会遵循以下准则:

    • 默认情况下,这些不是静态方法。它们应该只是静态方法,因为它们自然是无状态的(行为仅取决于参数)。如果它们不是自然无状态的,那么您应该创建一个适当的类来管理该状态。
    • 用单元测试覆盖这些。如果您不对其他任何内容进行单元测试,请对这些内容进行单元测试。这应该很容易做到。如果这不容易,那就不对了。

    如果你喜欢依赖注入,你仍然可以拥有它。依赖静态方法的代码可以改为调用 Func(T, U) 或引用该静态方法的 Action。

    【讨论】:

      【解决方案3】:

      我通常只将配置和常量之类的东西放在单例或静态类中,因为它永远不会改变,还不如是“全局的”。

      【讨论】:

      • 配置永远不会改变?!? -1 没有汤给你。
      • 我说的不够清楚,我相信。我的意思是在应用程序生命周期中永远不会改变的值,例如从 web.config 中获取值的属性。
      • 朋友,我会支持你摆脱消极情绪的土地
      【解决方案4】:

      绝对不是。随着时间的推移,实用程序模块会变成大量粗糙的代码。

      【讨论】:

        猜你喜欢
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 2016-12-22
        • 1970-01-01
        相关资源
        最近更新 更多