我有下面的代码和语句2(scopeId)和3(productScopeId)在许多方法中都是重复的。如何重构下面的方法,以便它可以用于许多方法。我不想创建一个包含这两个变量的类,并返回范围和产品范围ID。你能否提出其他更好的建议。在此先感谢您的帮助。
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 );
}
答案 0 :(得分: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
另外......那是我在那里看到的检查异常吗?我希望不是......