← Назад к вопросам

Может ли быть чистая архитектура вне бизнес логики?

3.0 Senior🔥 112 комментариев
#Архитектура и паттерны

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Чистая архитектура и бизнес-логика: неразрывная связь

Нет, чистая архитектура не может существовать вне бизнес-логики. Это фундаментальное противоречие самой сути концепции, предложенной Робертом Мартином (Uncle Bob). Чистая архитектура — это не просто набор технических паттернов, а философия организации кода, где бизнес-логика является абсолютным центром и главной ценностью всей системы.

Почему бизнес-логика — это ядро?

В чистой архитектуре все слои организованы концентрическими кругами, где:

  1. Внутренние круги содержат сущности (Entities) и сценарии использования (Use Cases) — это и есть чистая бизнес-логика.
  2. Внешние круги содержат детали реализации: базы данных, фреймворки, UI, API.

Ключевое правило: зависимости направлены внутрь. Внешние слои зависят от внутренних, но не наоборот. Бизнес-логика ничего не знает о том, как её данные сохраняются или отображаются.

// Пример: бизнес-логика (внутренний круг) НЕ зависит от деталей
namespace Core\Domain;

class Order // Сущность - чистая бизнес-логика
{
    private string $id;
    private float $total;
    
    public function applyDiscount(float $percentage): void
    {
        // Чистая бизнес-правило, без внешних зависимостей
        $this->total -= $this->total * ($percentage / 100);
    }
}

// Сценарий использования (Use Case) - тоже бизнес-логика
class ApplyOrderDiscountUseCase
{
    public function execute(Order $order, float $discount): void
    {
        $order->applyDiscount($discount);
        // Здесь НЕТ вызовов к базе данных или API
    }
}

Что происходит при отсутствии бизнес-логики?

Если попытаться применить принципы чистой архитектуры к проекту без значимой бизнес-логики (например, к простому CRUD-приложению или прокси-серверу), вы столкнётесь с парадоксом:

  1. Архитектурный оверкилл — вы создаёте многослойную структуру для операций, которые по сути являются прямыми операциями с базой данных
  2. Пустые абстракции — сценарии использования будут просто передавать данные между слоями без преобразований
  3. Нарушение принципа YAGNI — вы добавляете сложность, которая никогда не окупится
// Антипаттерн: "чистая архитектура" без бизнес-логики
class CreateUserUseCase // Претендует на роль бизнес-логики
{
    private UserRepositoryInterface $repository;
    
    public function execute(array $data): User
    {
        // НЕТ реальной бизнес-логики, только передача данных
        $user = new User($data);
        return $this->repository->save($user);
    }
}
// Это просто избыточная прослойка без ценности

Когда чистая архитектура оправдана?

Чистая архитектура имеет смысл ТОЛЬКО когда:

  • Есть сложные бизнес-правила, которые меняются независимо от инфраструктуры
  • Проект долгоживущий и требует поддержки годами
  • Есть несколько способов взаимодействия (Web, API, CLI) с одной логикой
  • Часто меняются внешние зависимости (БД, фреймворки, сторонние сервисы)

Альтернативы для проектов без сложной бизнес-логики

Для простых приложений лучше использовать более легковесные подходы:

  • Транзакционные скрипты для простых операций
  • Active Record для CRUD-приложений
  • Гексагональная архитектура в упрощённом виде

Вывод

Чистая архитектура — это архитектура для бизнес-логики. Её основная цель — защитить ценнейшие бизнес-правила от изменений во внешнем мире технологий. Без бизнес-логики чистая архитектура теряет смысл и становится дорогостоящим карго-культом. Как сказал сам Роберт Мартин: "Архитектура должна отдавать приоритет функциональности, а не фреймворкам". Если нет функциональности (бизнес-логики), то и архитектура не нужна.

Может ли быть чистая архитектура вне бизнес логики? | PrepBro