LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

Ведь налицо использование антипаттерна полтергейста, когда создается микрокласс с несколькими простейшими функциями.

Можно под любой вариант кода подогнать паттерн, либо антипаттерн, было бы желание.

Но поставим вопрос иначе. Вот два куска кода. Действительно ли проще читать второй кусок и понимать происходящее? Ведь, именно в этом суть борьбы с антипаттернами.

По-моему, ясный и однозначный код из первого варианта превращен во втором в неочевидное нагромождение методов.

  private void thereAreManyLetters(int count) {
  ...
  }
  private void thereIsOneLetter() {
  ...
  }
  private void thereAreNoLetters() {
  ...
  }

По одним только названиям видно, что это плохой код. А уж по коду внутри — и подавно. Следующий этап этого дизайна будет выглядеть так:

  private void createPluralDependentMessageParts(int count) {
    applyCount(count);
    if (countIsZero()) {
      thereAreNoLetters();
    } else if (countIsOne()) {
      thereIsOneLetter();
    } else {
      thereAreManyLetters(count);
    }
  }
  private void thereAreManyLetters(int count) {
    applyNumber(Integer.toString(count));
    applyVerbAre();
    applyPluralModifier();
  }
  private void thereIsOneLetter() {
    applyNumberOne();
    applyVerbIs();
    applySingularModifier();
  }
  private void thereAreNoLetters() {
    applyNumberNo();
    applyVerbAre();
    applyPluralModifier();
  }

Исходная версия Deleted, :

Ведь налицо использование антипаттерна полтергейста, когда создается микрокласс с несколькими простейшими функциями.

Можно под любой вариант кода подогнать паттерн, либо антипаттерн, было бы желание.

Но поставим вопрос иначе. Вот два куска кода. Действительно ли проще читать второй кусок и понимать суть происходящего? Ведь, именно в этом суть борьбы с антипаттернами.

По-моему, ясный и однозначный код из первого варианта превращен во втором в неочевидное нагромождение методов.

  private void thereAreManyLetters(int count) {
  ...
  }
  private void thereIsOneLetter() {
  ...
  }
  private void thereAreNoLetters() {
  ...
  }

По одним только названиям видно, что это плохой код. А уж по коду внутри — и подавно. Следующий этап этого дизайна будет выглядеть так:

  private void createPluralDependentMessageParts(int count) {
    applyCount(count);
    if (countIsZero()) {
      thereAreNoLetters();
    } else if (countIsOne()) {
      thereIsOneLetter();
    } else {
      thereAreManyLetters(count);
    }
  }
  private void thereAreManyLetters(int count) {
    applyNumber(Integer.toString(count));
    applyVerbAre();
    applyPluralModifier();
  }
  private void thereIsOneLetter() {
    applyNumberOne();
    applyVerbIs();
    applySingularModifier();
  }
  private void thereAreNoLetters() {
    applyNumberNo();
    applyVerbAre();
    applyPluralModifier();
  }