Что такое stateful-операция?

«Что такое stateful-операция?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Stateful-операция — это операция, результат или поведение которой зависят от состояния (state), сохранённого от предыдущих операций. Такая операция имеет "память" о прошлых взаимодействиях.

Ключевая характеристика: Зависимость от контекста или истории.

Пример (счётчик):

public class StatefulCounter {
    private int count = 0; // Состояние хранится в поле объекта

    public int increment() {
        count++; // Результат зависит от предыдущего значения count
        return count;
    }
}

StatefulCounter counter = new StatefulCounter();
System.out.println(counter.increment()); // Вывод: 1
System.out.println(counter.increment()); // Вывод: 2 (зависит от первого вызова)

Контраст с Stateless:

// Stateless-операция (чистая функция)
public static int add(int a, int b) {
    return a + b; // Результат зависит ТОЛЬКО от входных аргументов
}
System.out.println(add(5, 3)); // Всегда 8, независимо от предыдущих вызовов.

Где встречается и почему это важно:

  • Сессии пользователя: Корзина покупок в интернет-магазине должна "помнить" добавленные товары.
  • Транзакции БД: Последовательность операций в рамках одной транзакции.
  • Стриминг данных: Обработка, где нужно учитывать предыдущие элементы (например, вычисление скользящего среднего).

Недостатки stateful-подхода:

  • Сложность масштабирования: Состояние должно быть доступно экземпляру, обрабатывающему запрос (требует sticky sessions или внешнего хранилища).
  • Сложность отладки и тестирования: Поведение системы зависит от истории, которую нужно воспроизвести.
  • Потенциальные утечки памяти: Неуправляемое состояние может накапливаться.