我大约有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告诉我,即使值不唯一,代码也是重复的。我不知道如何解决这个问题。我该如何解决这个问题,因为重复代码并不是最好的代码。预先感谢。
答案 0 :(得分:1)
您应该在此处尝试利用 OOPS 概念,并在此处使用inheritance
您可以创建一个名为AttributeRule
的基类,该基类将覆盖writeTemplate()
方法,并在其中放置所有冗余代码,并通过您的子类AttributeCompareRule
和{{1 }}
这是概念性想法和一些摘要
AttributeCompareRule