2013-01-24 30 views
0

我在我的課上有四個RichTable實例,並且有一個current表實例的概念。根據國旗resetAll我需要清除所有表或所有表的選擇,除了當前的。如果resetAll爲真,那麼清除所有內容,否則省略當前的內容。當前表的索引作爲參數傳遞給執行清理操作的方法。如何重構此代碼並應用OO模式?

呼籲清理出一切看起來是這樣的:

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); 
     } 
} 

我覺得我在這裏寫重複的冗餘代碼,並且將維護在今後的複雜化。我該如何改進這些代碼並使其更加面向對象?

回答

3

你可以讓clearAll()委託(=> OOP模式),以clearAllExceptCurrent()(=>提高通過刪除重複的代碼,使其更易於維護):

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

兩種方法的唯一區別是條件i != exceptControlclearAllExceptCurrent()。通過傳遞-1這個條件總是true,因此實際上不存在。

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