java - 如何重构这段代码?

标签 java if-statement refactoring dry

请建议重构此代码。 避免代码重复、多个 If

public FormDataDTO getDataForFieldFormCHrzntalField(Field field) {
        FormDataDTO formDataDTO = new FormDataDTO();
        CHrzntalField cHrzntalField = (CHrzntalField) field;
        for (int j = 0; j < cHrzntalField.getFieldCount(); j++) {
            Field sField = cHrzntalField.getField(j);
            if (sField instanceof LabelField) {
                LabelField labelField = sField;
                String fieldName = labelField.getText();
                System.out.println("The Label field name is " + fieldName);
                formDataDTO.setFieldName(fieldName);
            } else if (sField instanceof CTextFieldBorder) {
                CTextFieldBorder cTextFieldBorder = (CTextFieldBorder) sField;
                Field ssField = cTextFieldBorder.getField(0);
                if (ssField instanceof TextField) {
                    TextField textField = ssField;
                    System.out.println("Inside TextField---- "
                            + textField.getText());
                    formDataDTO.setFieldType("TextField");
                    formDataDTO.setSelectedValue(textField.getText());
                } else if (ssField instanceof DateField) {
                    DateField dateField = ssField;
                    String dateString = dateField.toString();
                    System.out.println("dateString " + dateString);
                    formDataDTO.setFieldType("Date");
                    formDataDTO.setSelectedValue(dateString);
                }
            } else if (sField instanceof CChoiceField) {
                CChoiceField cChoiceField = (CChoiceField) sField;
                int i = cChoiceField.getSelectedIndex();
                String selectedValue = cChoiceField.getChoice(i);
                System.out.println("Choice " + selectedValue);
                formDataDTO.setFieldType("Combo");
                formDataDTO.setSelectedValue(selectedValue);
            } else if (sField instanceof CheckboxField) {
                CheckboxField checkboxField = (CheckboxField) sField;
                boolean checkStatus = checkboxField.getChecked();
                System.out.println("Check box field " + checkStatus);
                formDataDTO.setFieldType("Checkbox");
                String status = new Boolean(checkStatus).toString();
                formDataDTO.setSelectedValue(status);
            }
        }
        return formDataDTO;
    }

最佳答案

第一步是创建一个单元测试来验证此方法的行为。其次,“告诉,不要问”是良好的 OO 设计的原则,因此如果您可以重构 Field 类型及其子类,实现一个允许它们在 FormDataDTO 上设置必要信息的方法,那就太好了。

关于java - 如何重构这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1706684/

相关文章:

java - 用于执行一种方法的 JUnit 套件运行程序

Windows上的java println输出编码

java - 将背景图片添加到 JFrame

php - 如何编写多个条件为 true 的 php If 语句(Condition#1=true、Condition#2=true、Condition#3=true)

if-statement - 没有 `else` 的 Julia 三元运算符

ruby-on-rails - 将业务规则移动到模型中

php - Zend Action Controller——重构攻略

java - EhCache:缓存架构

python - 为什么我的 while 循环永远运行 print _ ?

c# - 重构两个方法以使用接口(interface)和/或泛型