Как вы заполняете Java Bean, который хранит значения, вычисленные с использованием входных значений из нескольких других Java-бобов, без кодового кода?
Я создаю приложение JSF, где пользователь может выполнить инженерный расчет в системе частей. В моем лицевом представлении есть вкладка Primefaces с вкладкой для каждой части, где пользователь вводит спецификации детали (материал, ширина, толщина, диаметр и т.д.), А затем вкладку "Результаты" с помощью кнопки "Кнопка", которая при нажатии отображает ряд выполненных инженерных вычислений/формул (используя MathJax) и показывает их вычисленные значения.
Я закодировал все свои компоненты ввода и начал пытаться заполнить вкладку "Результаты", но шаблон действия computeResults()
в моем computeResults()
начинает пахнуть гнилым.
Вот упрощенный макет кода
@Named("calculator")
@SessionScoped
public class BackingBean
@Inject
JointConfigurationPojo joint; //Parent POJO which groups other POJOs for Serializing just the users inputs
@Inject
JointToleranceResults jTol; // Bean to store computed results related to joint tolerances. I'll have many more types of engineering calcs to perform
@Inject
JointTolEngServices jointTolService; // Contains engineering formulas for computing joint tolerances
public void computeResults() {
jTol.setJoint_stackup_max(jointTolService.computeLengthMax(joint.getPlate1().getMaximum_thickness(), joint.getPlate2().getMaximum_thickness(), joint.getBoltWasher().getMaximum_thickness(), joint.getNutWasher().getMaximum_thickness());
jTol.setJoint_stackup_min(jointTolService.computeLengthMin(joint.getPlate1().getMinimum_thickness(), joint.getPlate2().getMinimum_thickness(), joint.getBoltWasher().getMinimum_thickness(), joint.getNutWasher().getMinimum_thickness());
jTol.setMin_bolt_thread(jointTolService.computeThreadProtrusion(joint.getPlate1().getMinimum_thickness(), joint.getPlate2().getMinimum_thickness(), joint.getBoltWasher().getMinimum_thickness(), joint.getNutWasher().getMinimum_thickness(), joint.getBolt().getBoltShaftLength(), joint.getNut().getNutHeight());
yuk or is this how it got to be??
}
У меня есть дюжина или больше фаз результатов вычислений, и этот раздел становится беспорядочным. Как очистить метод computeResults()? Должен быть лучший способ создать экземпляр всех компонентов результатов.... с конструкторами? CDI?
-
Bolt Input Tab/Form:
<p:inputText size="1" id="bolt_length" value="#{jointCalc.joint.bolt.nominal_fastener_length}">
-
Results Tab
#{jointCalc.jTol.joint_stackup_max}
#{jointCalc.jTol.joint_stackup_min}
#{jointCalc.jTol.min_bolt_thread}
etc...
-
public class JointConfigurationPojo implements Serializable { //Could have various number of joint configurations (Tapped hole/weld stud/3plates)
public JointConfigurationPojo () {
bolt = new Bolt();
boltWasher = new Washer();
nutWasher = new Washer();
nut = new Nut();
plate1 = new Plate();
plate2 = new Plate();
}
Может быть, вы должны позволить вашим бобам больше работать над вычислением, если это невозможно, вы можете передать весь bean- jointTolService
в jointTolService
.
И это должно быть так:
jointTolService.computeLengthMax(joint);
jointTolService.computeLengthMin(joint);
jointTolService.computeThreadProtrusion(joint)
Или лучше
jointTolService.setJoint(joint);
JointToleranceResults result = jointTolService.makeAllCalculation();
и jointTolService.makeAllCalculation()
вызовет методы вычисления.