【问题标题】:Refactoring unnested conditional statements重构未嵌套的条件语句
【发布时间】:2013-07-03 13:15:44
【问题描述】:

我有一个调用我的支持 bean 的复合组件。这里我传递一些图像的参数:

<h:outputText value="#{MyBBean.formRequest(
   cc.attrs.type, 
   cc.attrs.orientation, 
   cc.attrs.title, 
   cc.attrs.width, 
   cc.attrs.height, 
   cc.attrs.xlabel, 
   cc.attrs.ylabel, 
   cc.attrs.value)}" 
escape="false" />

方法如下

public boolean formRequest(
      final String type,
      final String orientation,
      final String title,
      final String width,
      final String height,
      final String xlabel,
      final String ylabel) {

   // some actions here

   if (height != null) {
      appendAttribute(HEIGHT_ATTRIBUTE_NAME, height, request);
   }

   if (width != null) {
      appendAttribute(WIDTH_ATTRIBUTE_NAME, width, request);
   }

   // the like

   if (ylabel != null ) {
      appendAttribute(Y_LABEL_ATTRIBUTE_NAME, ylabel, request);
   }

   // other actions

   return request.toString();
}

这里是 appendAttribute 方法

private void appendAttribute(final String attributeName, 
      final String attributeValue, final StringBuilder builder) {

   builder.append(attributeName);
   builder.append(EQUALS_CHAR);
   builder.append(attributeValue);
   builder.append(AMPERSAND_CHAR);
}

您对重构这些未嵌套的 if 语句有任何想法吗?因为,就我而言,它闻起来很臭

【问题讨论】:

    标签: java refactoring conditional statements


    【解决方案1】:

    好吧,您可以将 if 语句移到 appendAttribute 方法中。那么你只会在一个地方有条件。

    public boolean formRequest(
      final String type,
      final String orientation,
      final String title,
      final String width,
      final String height,
      final String xlabel,
      final String ylabel) {
    
      appendAttribute(HEIGHT_ATTRIBUTE_NAME, height, request);
      appendAttribute(WIDTH_ATTRIBUTE_NAME, width, request);
      appendAttribute(Y_LABEL_ATTRIBUTE_NAME, ylabel, request);
      return request.toString();
    }
    

    和:

    private void appendAttribute(final String attributeName, 
      final String attributeValue, final StringBuilder builder) {
    
      if(attributeValue != null) {
          builder.append(attributeName);
          builder.append(EQUALS_CHAR);
          builder.append(attributeValue);
          builder.append(AMPERSAND_CHAR);
      }
    }
    

    【讨论】:

    • +1 我只是建议将方法重命名为appendNonNullAttribute
    • 但是,不管怎样,不使用任何多态性之类的,将其留在这种状态下,您认为可以吗?
    猜你喜欢
    • 2020-01-02
    • 2019-07-16
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2011-03-21
    相关资源
    最近更新 更多