重构代码java

时间:2014-10-03 21:20:56

标签: java refactoring

我有下面的代码和语句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 );
        }

1 个答案:

答案 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

另外......那是我在那里看到的检查异常吗?我希望不是......