在我的情况下,如何防止Java中的重复代码?

时间:2018-12-27 21:04:32

标签: java duplicates

我大约有6个类,它们的值几乎“相同”。我将在下面给出两个类和一个示例,然后描述我在做什么。

    public class AttributeRangeRule implements Template {
    @Override
    public String writeTemplate(BusinessRule businessRule) throws Exception {

        String link = TemplateReader.getInstance().getLinkToQuery(businessRule.getBusinessRuleTypeCode());
        String template = TemplateReader.getInstance().readQuery(link);
        ST templateFixer = new ST(template);
        templateFixer.add("code", businessRule.getBusinessRuleTypeCode());
        templateFixer.add("attribute_table", businessRule.getListOfTables().get(0).getName());
        templateFixer.add("operator", businessRule.getOperator().getName());
        templateFixer.add("range_min", businessRule.getListOfValues().get(0).getValue());
        templateFixer.add("range_max", businessRule.getListOfValues().get(1).getValue());
        templateFixer.add("attribute_column", businessRule.getListOfColumns().get(0).getName());
        templateFixer.add("error", businessRule.getErrorMessage());
        templateFixer.add("GreaterOrEqual", ">=");
        templateFixer.add("LessOrEqual", "<=");
        templateFixer.add("LessThen", "<");
        templateFixer.add("GreaterThen", ">");
        String templateDLL = templateFixer.render();
        return templateDLL;

    }
}


public class AttributeCompareRule implements Template {
    @Override
    public String writeTemplate(BusinessRule businessRule) throws Exception {

        String link = TemplateReader.getInstance().getLinkToQuery(businessRule.getBusinessRuleTypeCode());
        String template = TemplateReader.getInstance().readQuery(link);
        ST templateFixer = new ST(template);
        templateFixer.add("code", businessRule.getBusinessRuleTypeCode());
        templateFixer.add("attribute_table", businessRule.getListOfTables().get(0).getName());
        templateFixer.add("operand", businessRule.getOperator().getName());
        templateFixer.add("compare_with", businessRule.getListOfValues().get(0).getValue());
        templateFixer.add("error", businessRule.getErrorMessage());
        String templateDLL = templateFixer.render();
        return templateDLL;

    }
}

templateFixer.add(“ code ..”)例如是重复的。它们在两个类中的编写方式相同,但值不同。

我有不同的类,并具有方法writeTemplate()的不同实现。如您所见,AttributeRangeRule与AttributeCompareRule不同。这段代码正在为我编写查询。 Intellij告诉我,即使值不唯一,代码也是重复的。我不知道如何解决这个问题。我该如何解决这个问题,因为重复代码并不是最好的代码。预先感谢。

1 个答案:

答案 0 :(得分:1)

您应该在此处尝试利用 OOPS 概念,并在此处使用inheritance

您可以创建一个名为AttributeRule的基类,该基类将覆盖writeTemplate()方法,并在其中放置所有冗余代码,并通过您的子类AttributeCompareRule和{{1 }}

这是概念性想法和一些摘要

AttributeCompareRule