Мне нужно написать объект Java, который используется для хранения результатов расчета. Результаты содержат большое количество полей, которые могут устанавливаться или не устанавливаться, зависит от типа используемого алгоритма. Например:Лучший способ написать java-объект с большим количеством дополнительных свойств
class EquityValuationResult {
private ValuationAlgorithm algorithm;
private int yield;
private double curve;
private double meanValue;
private double probability;
private int standardDeviation;
private boolean approximateValue;
......
//Getter and Setters
}
Для различного алгоритма оценки содержание этих свойств может отличаться. Например, если алгоритм равен А, доходность и вероятность будут содержать значение вычисления, остальные из них будут равны нулю; если алгоритм равен B, стандартное отклонение и кривая будут содержать результат, а остальные будут равны нулю и т. д. Правило очень сложное, например, если approcimateValue истинно, часть значения будет переопределено и т. д. Следовательно, все эти свойства должны быть в одном классе, поскольку они логически являются одним результатом.
Альтернативный способ сделать это, чтобы использовать карту
class EquityValuationResult {
private final String YIELD = "yield";
private final String CURVE = "curve";
........
private ValuationAlgorithm algorithm;
private final Map<String, Object> result = new HashMap<String, Object>();
// Getter and Setters
}
Но если я делаю это так, то геттер и сеттер должен преобразовать значения из объекта в соответствующий тип данных. Я также должен определить эти константы и использовать их в качестве ключа карты, это выглядит слишком громоздким.
Какой будет лучший способ, на ваш взгляд? Есть ли другой лучший способ сделать это?
EDIT: Забыл упомянуть, создавая отдельный класс для каждого расчета. Тип не является вариантом из-за ограничений. Я должен использовать один класс.
Было бы больше смысла создавать специализированные типы результатов для ваших видов расчета. Идея объединения всех типов в один, приводит к таким плохим классам. – Tom
Спасибо за ваш ответ. Я забыл упомянуть, что создание отдельного класса для каждой операции не является опцией из-за ограничения. Я должен использовать один класс. – Kevin
не могли бы вы объяснить, почему это так? – aioobe