我正在编写一个对象转换类,用于将域层对象转换为 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
}
}
相反,这里有什么好的解决方案?我已经阅读了访问者模式,但不确定它如何应用在这里。
谢谢