Основной навык в разработке ПО - способность разделять в коде Действия, Вычисления и Данные.

Важная задача любой системы - это моделирование изменений состояния во времени. Данные и Вычисления моделировать легко (за счет их автономности), поэтому большую часть кода стоит выносить именно в эти категории.

Разделение на эти категории способствует (отчасти) выравниванию уровней абстракции в коде.

Данные предпочтительнее Вычислений. Вычисления предпочтительнее Действий.


Отличный пример того, как Действия не позволяют обоснованно рассуждать о поведении программы (источник):

class Foo {
  public static Integer current = 0;

  static Integer addOne(Integer i) {
    current++;

    if (current == 3) {
      return null;
    } else if (current == 4) {
      throw new IllegalStateException();
    } else {
      return i + current;
    }
  }
}

The idea here is you want the ability as a programmer to look at a method call, and be able to mentally replace it with its value, everywhere you see it. The exact same method call with the exact same value, because it really helps you understand what is going on in your code.


Попытка найти информацию о том, как лучше всего представлять данные в ООП, привела меня к следующим статьям: