这种不良做法/反模式的名称是什么?

2023-12-21

我试图向我的团队解释为什么这是不好的做法,并且正在寻找反模式参考来帮助我的解释。这是一个非常大的企业应用程序,因此这里有一个简单的示例来说明所实现的内容:

public void ControlStuff()
    {
        var listOfThings = LoadThings();
        var listOfThingsThatSupportX = new string[] {"ThingA","ThingB", "ThingC"};
        foreach (var thing in listOfThings)
        {
            if(listOfThingsThatSupportX.Contains(thing.Name))
            {
                DoSomething();
            }
        }
    }

我建议我们向“Things”基类添加一个属性来告诉我们它是否支持 X,因为 Thing 子类需要实现相关功能。像这样的东西:

public void ControlStuff()
    {
        var listOfThings = LoadThings();
        foreach (var thing in listOfThings)
        {
            if (thing.SupportsX)
            {
                DoSomething();
            }
        }
    }
class ThingBase
{
    public virtual bool SupportsX { get { return false; } }
}
class ThingA : ThingBase
{
    public override bool SupportsX { get { return true; } }
}
class ThingB : ThingBase
{
}

那么,很明显为什么第一种方法是不好的做法,但这叫什么?另外,是否有一种模式比我建议的模式更适合这个问题?


通常更好的方法(恕我直言)是使用接口而不是继承

那么只需检查对象是否实现了接口即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这种不良做法/反模式的名称是什么? 的相关文章

随机推荐

  • 如何让 WCF 与此 Web 服务对话?

    这是后续的这个问题 https stackoverflow com questions 1953132 whats the problem with this web service method 按照建议作者 Benjamin 在这里 h
  • Cygwin 和 PHPUnit:无法打开输入文件:/cygdrive/c/xampp/php/phpunit

    有没有办法从 Cygwin 运行 PHPUnit 每次我运行 PHPUnit 时都会收到此错误 Could not open input file cygdrive c xampp php phpunit 我正在尝试在我的 Zend Fra
  • Silverlight 4 获取当前用户

    我已经看到这个关于 Silverlight 2 的问题 但我还没有看到任何关于 Silverlight 4 的问题 有没有办法让当前用户在 Silverlight 4 0 中运行应用程序 我想我记得看到过这是 4 0 的功能之一 但我找不到
  • Scala 相当于 java.util.Scanner

    我非常熟悉使用java util Scanner with next hasNext nextInt nextLine 等来解析输入 我还应该在 Scala 中使用其他东西吗 这些数据不是按照语法构建的 而是按照语法构建的 它比那更临时 例
  • AsciiDoc 在列表块内添加粗体文本

    有一些 AsciiDoc 有一个类似的块 this is a test with some formatted tabbed text in it blah 我希望文本显示为 this is a test with some formatt
  • 如何从windbg中的函数获取返回值?

    我正在尝试调试一些 win32API 例如返回句柄的 Createthread 如何获取windbg的返回值 我做了一些研究 发现返回值通常存储在 EAx 寄存器中 如果我在 CreateThread 上放置断点 那么我可以单步执行 Cre
  • Java 7 Kerberos 问题 - AES128 校验和损坏

    我正在从 Java 6 迁移到 Java 7 并且遇到了 Kerberos 身份验证问题 在我看来 底层加密类型顺序已被切换 因此使用了不同的加密类型 在这种情况下Aes128CtsHmacSha1EType当 Java 7 运行时 将用于
  • 设置 double 中点后的位数

    在 C double 类型中 如何设置点后的位数 我只需要 4 谢谢 你不能 二进制浮点数 http pobox com skeet csharp floatingpoint html不是那样的 你可以format这样就可以加倍 例如使用
  • Laravel 验证属性“好名字”

    我正在尝试使用 语言 gt 语言 gt validation php 中的验证属性来替换 属性名称 输入名称 以获得正确的读取名称 例如 first name gt 名字 使用起来似乎很简单 但验证器不会显示 好名字 我有这个 attrib
  • Turbo CPP 中的鼠标程序

    我用turbo cpp编写了一个程序 它使用鼠标作为基本的GUI 我还编写了一个函数来确定鼠标是否单击了某个位置显示的某个文本 第一次运行时一切正常 但是当我第二次运行该程序时 出现了问题 即使鼠标刚刚经过一个选项 而不是单击 它也会被选中
  • 连接到 AWS IoT MQTT 主题的客户端数量

    我们开发了一个 iOS 应用程序 并将该应用程序配置为侦听 AWS IoT 上特定 MQTT 主题上发布的所有消息 我想知道的是 有没有办法可以提取正在收听该主题的已连接设备的列表 我检查了cloudWatch日志 但找不到详细信息 例如所
  • Excel VSTO Addin 显示/隐藏任务窗格

    我在这里做教程 空白 Excel 页面一切正常 https msdn microsoft com en us library bb608590 v vs 120 aspx https msdn microsoft com en us lib
  • 如果我们需要更改 input_shape,为什么需要 include_top=False ?

    据我所知 输入元组是从卷积块进入的 因此 如果我们想改变 input tuple 的形状 修改卷积就有意义 为什么我们需要 include top False 并删除最后的全连接层 另一方面 如果我们有不同数量的类 Keras 可以选择使用
  • 如何在 Firebase 中验证转义的基于电子邮件的用户帐户?

    我正在使用 Firebase 简单登录的电子邮件 密码身份验证选项 我使用转义电子邮件作为键来存储用户数据 其中 字符已替换为 因为 Firebase 不允许在键中存储 而不是使用用户 ID 作为键 问题是 在安全规则中 我无法使用正则表达
  • System.NullReferenceException:未将对象引用设置为对象的实例[重复]

    这个问题在这里已经有答案了 可能的重复 NET 中的 NullReferenceException 是什么 https stackoverflow com questions 4660142 what is a nullreferencee
  • C# 桌面应用程序中的会话变量?

    我正在开发一个 C 独立的单用户桌面应用程序 需要用户登录该应用程序 我想确保当 5 分钟左右没有任何活动时 应用程序将提示用户再次登录 我想到了几种解决方案来做到这一点 但似乎效率不高 以前 在进行 Web 编程时 我能够使用会话变量来执
  • 苹果推送通知分发证书签名请求是否需要与分发证书用于签署应用程序的请求相同?

    我有一个已创建的现有应用程序 并且最近配置了推送通知 配置时 系统要求我上传证书签名请求 CSR 我不再拥有用于发布应用程序的原始 CSR 这是我需要上传到推送通知配置才能接收推送通知证书的 CSR 吗 我有带有可用私钥的分发证书 我尝试创
  • Angular 4上的动画似乎没有过渡效果

    trigger expandCollapse state open style height state close style height 0px transition open lt gt close animate 1000 使用此
  • postgres中的SQL将重复事件的日期时间转换为未来的日期时间

    我仅使用日期时间来跟踪表中每周重复发生的事件 我只关心时间和它所在的星期几 我需要能够将设置的 DATETIME 转换为当前或即将到来的未来日期 IE 如何转换存储为的日期2013 02 22 12 00 00使用当前日期到下一次出现的日期
  • 这种不良做法/反模式的名称是什么?

    我试图向我的团队解释为什么这是不好的做法 并且正在寻找反模式参考来帮助我的解释 这是一个非常大的企业应用程序 因此这里有一个简单的示例来说明所实现的内容 public void ControlStuff var listOfThings L