我正在编写一个对象转换类,用于将域层对象转换为 UI 对象,反之亦然。问题是我的 UI 对象被组织成层次结构,因此我的对象转换类包含“instanceof”语句。这里有明显的代码味道,但我不确定解决方案是什么。
所以我的 UI 层次结构包含一个 RuleDTO,如下所示:
public class RuleDTO {
protected long ruleID;
protected long rowID;
protected AttributeDTO leftCondition;
protected AttributeDTO rightCondition;
protected OperationTypeDTO operationType;
protected boolean isActive;
// etc...
}
然后我的 RuleDTO 可以被 AssignmentRuleDTO 子类化,如下所示:
public class AssignmentRuleDTO extends RuleDTO {
protected String assignedToTeam;
protected String assignmentOperator;
// etc...
}
RuleDTO 也可以被 EvaluationRuleDTO 子类化:
public class EvaluationRuleDTO extends RuleDTO {
protected String successAction;
protected String failureAction;
// etc...
}
问题出现在我的 ObjectConversionHelper 类中,它包含以下类型的逻辑:
{
// Perform logic common to RuleDTO such as setting ruleID, isActive etc
if(ruleDTO instanceof AssignmentRuleDTO) {
// Set assignedToTeam and assignmentOperator etc
}
else if (ruleDTO instanceOf EvaluationRuleDTO) {
// Set successAction and failureAction etc
}
}
这里有什么好的解决方案呢?我读过有关访问者模式的信息,但不确定它在这里如何应用。
谢谢
最佳答案
您的 RuleDTO
类应该有一个名为 setStuff()
或类似的方法。
然后您在 AssignmentRuleDTO
和 EvaluationRuleDTO
中覆盖它以设置相关字段。
这样你的 ObjectConversionHelper
就可以调用
ruleDTO.setStuff();
关于java - 可能的设计模式而不是 instanceof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11549706/