Как создать Java Bean для хранения вычисленных значений, используя другие Bean в качестве входных данных

1

Как вы заполняете 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();
}
  • 0
    По общему признанию не симпатичен, но кроме ваших методов, принимающих приличное количество параметров, я не вижу ничего плохого в том, что вы делаете.
  • 0
    Я не знаю, какой из них лучше передать отдельным параметрам, или весь мой компонент стика конфигурации. Затем возьмите пластины с двумя атрибутами толщины.
Показать ещё 1 комментарий
Теги:
oop

1 ответ

0

Может быть, вы должны позволить вашим бобам больше работать над вычислением, если это невозможно, вы можете передать весь bean- jointTolService в jointTolService.

И это должно быть так:

jointTolService.computeLengthMax(joint);
jointTolService.computeLengthMin(joint);
jointTolService.computeThreadProtrusion(joint)

Или лучше

 jointTolService.setJoint(joint);
 JointToleranceResults result = jointTolService.makeAllCalculation();

и jointTolService.makeAllCalculation() вызовет методы вычисления.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню