Jawa / Говнокод #11562 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
private String getMessage(String prop, boolean suffixEnabled) {
        String title = null;
        if (prop.equals("headerTitle.suffix")) {
            try {
                title = messageSource.getMessage("headerTitle.suffix", null, locale);
            } catch (NoSuchMessageException e) {
                //e.printStackTrace();
            }
            if (title == null)
                title = "";
        } else {
            try {
                title = messageSource.getMessage(prop, null, locale);
                if (suffixEnabled)
                    title += " " + messageSource.getMessage("headerTitle.suffix", null, locale);
            } catch (NoSuchMessageException e) {
                //e.printStackTrace();
            }
            if (title == null) {
                try {
                    title = messageSource.getMessage("headerTitle.default", null, locale);
                } catch (NoSuchMessageException ex) {
                    title = "";
                }
            }

        }
        return title;
    }

Запостил: welvet welvet, (Updated )

Комментарии (15) RSS

    • 1. Сама идея добавлять пробел к сообщению в зависимости от флажка. ProblemFactory не одобряе.
      2. Слишком много копипаста.
      Ответить
      • с копипастой соглашусь

        с флагом 50/50. метод приватный, значит используется для какого-то юзкейса внутри класса скорее всего.
        Ответить
  • Отрефакторил. Хотя StringBuilder можно было и опустить, использовав простую конкатенацию с пробелом (не критично).

    [code=java]
    // литералы в константы
    private static final String HEADER_SUFFIX_PROP = "headerTitle.suffix";
    private static final String DEFAULT_TITLE_PROP = "headerTitle.default";

    //.....

    private String getMessage(String prop, boolean suffixEnabled) {
    StringBuilder title = new StringBuilder(getMessageOrEmptyString(pr op));

    if (title.isEmpty()) {
    title.append(getMessageOrEmptyString(DEF AULT_TITLE_PROP));
    } else if (suffuxEnabled && !HEADER_SUFFIX_PROP.equals(prop)) {
    title.append(" ");
    title.append(getMessageOrEmptyString(HEA DER_SUFFIX_PROP));
    }
    return title.toString();
    }

    private String getMessageOrEmptyString(String prop) {
    try {
    return messageSource.getMessage(prop, null, locale);
    } catch (NoSuchMessageException e) {
    // добавить warning лог о несуществующем мессадже
    return "";
    }
    }
    [code]
    Ответить
    • Твою мать, нужна превьюшка!

      // литералы в константы
      private static final String HEADER_SUFFIX_PROP = "headerTitle.suffix";
      private static final String DEFAULT_TITLE_PROP = "headerTitle.default";
      
      private String getMessage(String prop, boolean suffixEnabled) {
          StringBuilder title = new StringBuilder(getMessageOrEmptyString(prop));
      
          if (title.isEmpty()) {
              title.append(getMessageOrEmptyString(DEFAULT_TITLE_PROP));
          } else if (suffuxEnabled && !HEADER_SUFFIX_PROP.equals(prop)) {       
              title.append(" ");
              title.append(getMessageOrEmptyString(HEADER_SUFFIX_PROP));
          }
          return title.toString();
      }
      
      private String getMessageOrEmptyString(String prop) {
          try {
              return messageSource.getMessage(prop, null, locale);
          } catch (NoSuchMessageException e) {
              // добавить warning лог о несуществующем мессадже
              return "";
          }
      }
      Ответить
      • с ходу не смог разобраться. копипаста ушла, читаемости не особо добавилось
        Ответить
  • мой вариант
    private static final String HEADER_SUFFIX = "headerTitle.suffix";
    	private static final String HEADER_DEFAULT = "headerTitle.default";
    	
    	private String getMessage(String prop, boolean suffixEnabled) {
            if (isSuffix(prop)) {
            	return getSuffix();
            } else {
            	String title = getSourceMessage(prop, true);
            	if (title == null) {
            		return getDefaultHeader();
        		} else {
        			return suffixEnabled ? withSuffix(title) : title;
        		}
            }
        }
    	
    	private boolean isSuffix(String prop) {
    		return HEADER_SUFFIX.equals(prop);
    	}
    	
    	private String getSuffix() {
    		return getSourceMessage(HEADER_SUFFIX, false);
    	}
    	
    	private String withSuffix(String text) {
    		String suffix = getSuffix();
    		if (suffix.isEmpty()) {
    			return text;
    		} else {
    			return text + " " + suffix;
    		}
    	}
    	
    	private String getDefaultHeader() {
    		return getSourceMessage(HEADER_DEFAULT, false);
    	}
    	
    	private String getSourceMessage(String prop, boolean nullIfAbsent) {
            try {
                return messageSource.getMessage(prop, null, locale);
            } catch (NoSuchMessageException ex) {
                return nullIfAbsent ? null : "";
            }		
    	}
    Ответить
    • В вашем варианте в трех местах используется конструкция if - else и в одном месте тернарный оператор, по сравнению с тем, что предложил я (один раз). Используется проверка на null, которую я вообще убрал за ненадобностью. Не думаю, что это легче разобрать, а главное сопровождать. Логики в коде гораздо больше.
      Ответить
      • кстати, ваш вариант работает неправильно когда мы просим "headerTitle.suffix" если он оказывается пустой.
        Ответить
        • Да, вы правы. Я был невнимателен. Ничего не придумал как добавить метод аналогичный вашему:

          private void appendSuffix(StringBuilder sb) {
              String suffix = getMessageOrEmptyString(HEADER_SUFFIX_PROP);
              if (!suffix.isEmpty()) {
                  title.append(" ");
                  title.append(suffix);
              }
          }


          Еще одна конструкция if.
          Ответить
          • я не это имел ввиду. Это, кстати, моя инициатива - в исходном коде этой логики нет.

            Я имел ввиду ситуацию getMessage("headerTitle.suffix", false)
            Ваш код вернет дефолтный заголовок, если значение окажется пустым, а исходный код вернет пустое значение.
            Ответить
    • частично лучше (правда, черезчур громоздко), но мне всё равно не нравится идея смешивать ответственность за получение сообщения с логикой форматирования этого сообщения. И не важно, приватный метод или нет.
      Ответить
      • можно переименовать getMessage в getFormattedMessage. Реально сообщение получается через getSourceMessage.
        Ответить
  • - Ты мой герой, но я ещё выясню, чем ты шантажировал Димошу, - она с какой-то гордостью произнесла это имя.
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8