【问题标题】:What design pattern is suitable for handing many conditional branching什么设计模式适合处理很多条件分支
【发布时间】:2019-03-22 04:01:57
【问题描述】:

我在一个表中有一堆行,其中存储了一些变量和相关值。我必须根据来自不同行的变量的值来触发任务。来自多行的多个值可以通过 AND/OR 条件重叠。在这种情况下,哪种设计模式有助于降低圈复杂度?

比方说,桌子

现在在运行时需要测试一些条件。例如,

如果 v1 列有任何值“a”或“b”并且第 3 和第 4 行包含任何“g”或第 5 行的所有值都包含值“f”,等等。

这种需求在一定的固定边界下是动态的,我必须准备一个方法来获取输入表和条件。该方法最终返回真/假。如果我天真地实现,我需要在完全有界的可能条件下嵌套许多 if/else,这使我的代码变得非常复杂。处理它的好模式是什么。

【问题讨论】:

  • 这是 java 问题还是 HTML 问题?代码在哪里?
  • @GhostCat 只需单击运行代码 sn-p 即可显示表格。文字制作的表格可能对读者来说更不方便。
  • @AJNeufeld 该表只是 Java/Android 项目下的 SQLite 快照。运行代码 sn -p 按钮以查看一个简单的表格。
  • 其实我想要一个好的设计模式来避免很多嵌套的if/else
  • 我已将表格替换为图片。现在我想它应该更方便。谢谢

标签: java algorithm design-patterns cyclomatic-complexity


【解决方案1】:

对于现实世界的场景,我认为您应该研究规则引擎,请参阅https://www.baeldung.com/java-rule-engines 以获取示例列表。

这里的重点是:用手写代码表示您的规则无法扩展!没有好的模式可以防止这样的代码库随着时间的推移变成意大利面条代码。在现实世界中,这样的规则经常变化,并且保持你的代码是最新的通常会导致另一个条件。

因此,我们有规则引擎,与手写的 if else 块级联相比,这些规则引擎允许您以更易于维护的方式表达此类复杂决策的元素。

问题是:如果您对自己的工作质量很认真,那么您很可能无论如何都会自己实现自己的小规则引擎。那么为什么不从书架上挑选一个,或者至少仔细研究一些,然后将它们作为如何更好地解决您的问题的灵感呢?!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    相关资源
    最近更新 更多