главная/Почему важно разделять логику и мутации состояния в коде
важно разделять логику и мутации состояния в коде

Почему важно разделять логику и мутации состояния в коде

Одна из самых частых архитектурных ошибок — функции, которые одновременно считают результат и изменяют состояние системы.

Например:

function calculateTotalPrice(Order $order): float
{
    $total = 0;

    foreach ($order->items as $item) {
        $total += $item->price * $item->qty;
    }

    $order->total = $total;
    $order->save();

    return $total;
}

Здесь функция:

  • считает цену
  • меняет состояние объекта
  • пишет в базу

Это усложняет тестирование, повторное использование и делает код менее предсказуемым.

Лучше — разделить чистую логику и мутации

function calculateTotalPrice(array $items): float
{
    $total = 0;

    foreach ($items as $item) {
        $total += $item->price * $item->qty;
    }

    return $total;
}

Мутация состояния:

$total = calculateTotalPrice($order->items);

$order->total = $total;
$order->save();

Теперь код:

  • проще тестировать
  • проще переиспользовать
  • легче читать
  • меньше скрытых побочных эффектов

Если функция что-то сохраняет, отправляет или пишет — это mutation.
Если читает данные и возвращает результат — это pure logic.

Разделяйте их — и архитектура станет заметно чище.