【问题标题】:What anti patterns do you use even though you know you shouldn't? [closed]即使你知道你不应该使用什么反模式? [关闭]
【发布时间】:2023-03-15 17:36:01
【问题描述】:

我是不是唯一一个有时会采取看似简单但错误的方式来摆脱某些设计情况的人?我承认我已经分享了有问题的 Singleton 对象。除此之外,众所周知,我会制作一两个上帝的对象来让事情看起来更容易。

您是否曾经使用过反模式,即使您知道不应该这样做?

【问题讨论】:

  • 我对单例很好奇。懒惰的出路是只使用普通的旧全局变量,那么为什么还要麻烦使用 more 复杂的反模式呢?全局变量可能很糟糕,但它们通常不如单身人士那么糟糕。而且更容易编码。
  • 我认为 Singletons 本质上是一种糟糕的设计模式,在我看来,它们仅适用于罕见的硬件驱动程序案例。在大多数其他情况下,它们只是在我的 OOP 环境中引入全局状态,这会损害设计质量目标,例如可移植性。
  • 接上一条评论 - 但是,我经常通过以下逻辑来证明单例的合理性:“我只需要其中一个,所以我将其设为单例”,即使我真正内心深处想要的是一个全局变量。
  • 重新单例;一些语言不允许静态接口成员 - 所以单例是一种在接口上提供类静态方法的方法(其中只有一个实例可以表示一个接口)。
  • 单例与静态/全局的真正用途是单点初始化,但(至少).NET 有静态构造函数。

标签: design-patterns coding-style anti-patterns


【解决方案1】:

尝试使某些东西变得灵活很容易,最终得到Inner Platform Effect。例如,我对内部数据库感到内疚。

有时,自己编写代码而不是使用预先准备好的类似版本 - Not Invented Here 太诱人了。我尽量避免,但是...

【讨论】:

    【解决方案2】:

    Copy and paste反模式

    【讨论】:

      【解决方案3】:

      God Object 反模式是一个容易犯的错误。有时,拆分课程似乎工作量太大。然后在稍后的某个时候,您会为此付出代价。我发现这种反模式与紧密耦合密切相关。

      当您使用供应商特定语言时,供应商锁定反模式也很难避免。

      【讨论】:

      • 你可能想编辑它说“上帝”。
      • 我喜欢 gob 对象的想法 - 有嘴没有裤子,虽然很复杂,但实际上并没有太多作用。
      • 我还以为你在用俚语。可惜你改变了它,你可以开始一个新的浪潮,呵呵。
      • 不幸的是,只是一个错字。在跑开并写作和回答之前,我可能应该阅读问题的正文。我现在看到上帝对象也在问题中。
      【解决方案4】:

      【讨论】:

        【解决方案5】:

        在 cmets 中,我认为这是一个答案 - 单例模式。

        这是一种在语言(如 Java)不支持时实现全局变量的方法。这是你永远不应该使用的模式之一——除非你需要它。重要的是能够区分何时需要全局变量(有实例)和何时只需要一个。

        除了引入全局状态的严重问题之外,单例还存在问题,例如在 Java 中,它们在类加载器中只有一个,具有多个类加载器,您最终可以得到多个副本。

        【讨论】:

          【解决方案6】:

          Vendor Lock In

          总是会为特定功能添加一个特定于供应商的东西,因为它比自己编写更有意义。后来我花了很多时间为这个决定自责。

          【讨论】:

            猜你喜欢
            • 2010-09-10
            • 1970-01-01
            • 1970-01-01
            • 2010-09-12
            • 2011-05-22
            • 1970-01-01
            • 2011-11-05
            • 1970-01-01
            • 2010-09-24
            相关资源
            最近更新 更多