2014-10-03 154 views
-4

我有下面的一段代碼和語句2(scopeId)和3(productScopeId)在許多方法中重複。我如何重構下面的方法,以便可以用於許多方法。我不想用這兩個變量創建一個類,並返回範圍和產品範圍ID。你能否建議其他更好的方法。在此先感謝您的幫助。重構代碼java

public List<Product> getAllHydroProducts() 
      throws RepositoryException { 
      String productTypeId = getProductTypeId(Group.GROUP_TYPE_NAME_HYDRO, getAllProductTypes()); 
      String scopeId = getScopeTypeId(Group.SCOPE_TYPE_NAME_HTX, getAvailableScopes()); 
      String productScopeId = getScopeTypeId(Group.SCOPE_TYPE_NAME_PROJECT, getAvailableScopes()); 

      return getProductsByTypeAndScope(productTypeId , scopeId ,productScopeId); 
     } 
+2

你的問題還不清楚。你是什​​麼意思「重構下面的方法,以便可以用於很多方法」?您的帖子中有一個方法調用其他方法。它已經是一種可以被其他方法使用(並使用)的方法。 – Ideasthete 2014-10-03 21:23:29

+0

聲明scopeId和productScope Id在我正在使用的其他方法中是重複的。 – Akshitha 2014-10-03 21:24:21

+1

好吧,我們看不到剩下的代碼,所以我們不能告訴你如何重構它。您可以通過各種方式來改變代碼的工作方式,但這取決於您。 – Ideasthete 2014-10-03 21:40:18

回答

0

我說你有幾個常數像Group.GROUP_TYPE_NAME_HYDRO的假設下工作,所有的方法都一樣,你告訴我們的一個,但具有不同的常數(我相信你應該與其他方法添加到您的問題,因爲沒有它們就沒有可見的重複代碼)。

你有兩種可能的情況(再次,與更多的代碼會更容易):

1)你只改變了產品類型不變,保持其他兩個都一樣在你的其他方法。如果是這樣的話,你可以提取像一個更通用的方法:

public List<Product> getAllProductsOfType(YourConstantType productType) throws RepositoryException { 
     return getProductsByTypeAndScope( 
      getProductTypeId(productType, getAllProductTypes()), 
      getScopeTypeId(Group.SCOPE_TYPE_NAME_HTX, getAvailableScopes()) , 
      getScopeTypeId(Group.SCOPE_TYPE_NAME_PROJECT, getAvailableScopes()) 
     ); 
} 

請注意,我不知道你的常量是什麼,因爲你我以前不把它們放在你的問題,這就是爲什麼YourConstantType有。 然後你現有的方法只是用它們的參數調用這個新的方法。

2)另一種情況:你的方法也有不同的範圍。在這種情況下,我可能會使用builder pattern

另外...是我看到的檢查異常?我希望不會...