2014-10-03 83 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

另外...是我看到的检查异常?我希望不会...