java - 降低方法的复杂性

标签 java algorithm

我有一个方法可以完成多项任务。它是应用程序业务逻辑的一部分,但由于有许多 if-thentry-catch block 以及许多 log<,因此可读性很差 调用。

public class MyClass {     

boolean createReport, sendReport, warnIfErrors;

public void archiveAll() {

    if (createReport) {
      //... ...
    }

    if (sendReport) {
      //... ...
    }

    if (warnIfErrors) {
      //... ...
    }

} 

想法是将任务移动到临时方法中,并有一个一目了然的“archiveAll”方法:

public void archiveAll() {

    doCreateReport();

    doSendReport();

    doWarnIfErrors();

} 

但是在这样做的同时,出现了两个问题:

  1. 如果所有方法都使用一个局部变量,我会把它作为类字段移动,但这不是好的设计
  2. 我也想将测试 if (createReport) 移到方法 doCreateReport 中,因为部分复杂性源自已完成的测试。不过,这会使子方法的内聚性很差。

最佳答案

如果您有很多在它们之间共享的局部变量,那么创建一个私有(private)类来将它们存储在一起可能是有意义的,甚至可以这样做:

MyReport report = new MyReport(); // or MyReport.doCreateReport(); if it makes more sense
report.send();
report.warnIfErrors();

同样,这实际上取决于函数当前是否足够大以保证这样的东西。

如果您可以只将这些公共(public)变量作为参数传递而无需大量参数列表,那么就这样做吧。

关于java - 降低方法的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6169162/

相关文章:

java - 如何创建 B+ 树数据结构

algorithm - 再分配算法

java - 这个在 Java 中合并 K 排序数组的算法是否正确?

尝试获取本地 jar 路径时 Java codeSource 空指针

java - 如何使用 wffweb 创建具有 colspan 属性的 Td?

java - 驱动程序 org.h2.Driver 声称不接受 jdbcUrl

java - 使用自定义对象消除或避免在 ArrayList 中添加重复项

java - 流形和结构

algorithm - 3x3 Sobel 算子和梯度特征

algorithm - 重新访问树上的递归函数 (DFS) 中的某些节点