ドメインレイヤーオブジェクトを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
}
}
代わりに、ここで良い解決策は何でしょうか? 訪問者パターンについて読んだことがありますが、ここでどのように適用されるかわかりません。
ありがとう