0

我的班级中有四个RichTable实例,并且有一个current表实例的概念。根据一个标志resetAll,我需要清除所有表或除当前表之外的所有表的选择。如果resetAll为真则清除所有内容,否则忽略当前的。当前表的索引作为参数传递给执行清理操作的方法。

清除一切的呼吁如下所示:

clearSubTypeSettings(true,-1);

清除除当前之外的所有内容的调用如下所示:

clearSubTypeSettings(true, col);

上述方法的实现是这样的:

private void clearSubTypeSettings(boolean resetAll, int exceptControl) {
    if (!resetAll) {
        clearAllExceptCurrent(exceptControl);
    } else {
        clearAll();
    }
 }

现在这两种方法看起来几乎一样clearAllExceptCurrent(exceptControl)clearAll()以下是实现:

  private void clearAll() {
        for (int i = 0; i < SUBTYPE_TABLES; i++)
            if (getSubTypeTable(i).getSelectedRowKeys() != null) {
                RichTable richTable = getSubTypeTable(i);
                RowKeySet rowkeySet = richTable.getSelectedRowKeys();
                rowkeySet.clear();
                AdfFacesContext.getCurrentInstance().addPartialTarget(richTable);
            }
    }

private void clearAllExceptCurrent(int exceptControl) {
    for (int i = 0; i < SUBTYPE_TABLES; i++)
        if (i != exceptControl && getSubTypeTable(i).getSelectedRowKeys() != null) {
            RichTable richTable = getSubTypeTable(i);
            RowKeySet rowkeySet = richTable.getSelectedRowKeys();
            rowkeySet.clear();
            AdfFacesContext.getCurrentInstance().addPartialTarget(richTable);
        }
}

我觉得我在这里编写了重复的冗余代码,将来会使维护复杂化。如何改进此代码并使其更加面向对象?

4

2 回答 2

3

您可以让clearAll() 委托(=> OOP 模式)来clearAllExceptCurrent()(=> 通过删除重复代码来改进代码,使其更易于维护):

private void clearAll() {
   clearAllExceptCurrent(-1);
}

您的两种方法之间的唯一区别i != exceptControlclearAllExceptCurrent(). 通过传递-1这个条件总是true并且因此实际上是不存在的。

于 2013-01-24T13:47:46.690 回答
0

大部分重复代码是清除表的位。那么怎么样:

private void clearTable(int id) {
    if (getSubTypeTable(i).getSelectedRowKeys() != null) {
        RichTable richTable = getSubTypeTable(i);
        RowKeySet rowkeySet = richTable.getSelectedRowKeys();
        rowkeySet.clear();
        AdfFacesContext.getCurrentInstance().addPartialTarget(richTable);
    }
}

然后:

 private void clearAll() {
    for (int i = 0; i < SUBTYPE_TABLES; i++) {
        clearTable(i);
    }
 }

private void clearAllExceptCurrent(int exceptControl) {
    for (int i = 0; i < SUBTYPE_TABLES; i++) {
        if (i != exceptControl) {
            clearTable(i)
        }
    }
}

编辑:if在里面移动语句clearTable

于 2013-01-24T13:47:14.460 回答