[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-arkhitektura-prilozheniy-chto-takoe-clean-architecture-chistaya-arkhitektura":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},121,"chto-takoe-clean-architecture-chistaya-arkhitektura",3,"arkhitektura-prilozheniy","Архитектура приложений","🏗️","Что такое Clean Architecture (чистая архитектура)","Clean Architecture (чистая архитектура) — концепция, предложенная Робертом Мартином (Uncle Bob), в которой зависимости направлены только внутрь: внешние слои знают о внутренних, но внутренние не знают о внешних.\n\n### Диаграмма слоёв\n\n```\n┌──────────────────────────────────────────────────────────────┐\n│                  Frameworks & Drivers                        │\n│   (Spring, JPA, Kafka, REST, UI)                            │\n│  ┌────────────────────────────────────────────────────────┐  │\n│  │               Interface Adapters                       │  │\n│  │   (Controllers, Gateways, Presenters)                  │  │\n│  │  ┌──────────────────────────────────────────────────┐  │  │\n│  │  │            Application Business Rules            │  │  │\n│  │  │               (Use Cases)                        │  │  │\n│  │  │  ┌────────────────────────────────────────────┐  │  │  │\n│  │  │  │       Enterprise Business Rules            │  │  │  │\n│  │  │  │          (Entities \u002F Domain)               │  │  │  │\n│  │  │  └────────────────────────────────────────────┘  │  │  │\n│  │  └──────────────────────────────────────────────────┘  │  │\n│  └────────────────────────────────────────────────────────┘  │\n└──────────────────────────────────────────────────────────────┘\n\nЗависимости → всегда направлены внутрь (к центру)\n```\n\n### Слои\n\n- **Entities (Сущности)** — бизнес-объекты и правила, не зависящие ни от чего. Могут использоваться в любом приложении.\n- **Use Cases (Сценарии использования)** — специфическая бизнес-логика приложения. Оркестрируют сущности.\n- **Interface Adapters (Адаптеры интерфейсов)** — преобразование данных между форматом Use Case и внешним форматом (контроллеры, презентеры, маппинг).\n- **Frameworks & Drivers** — фреймворки, БД, веб-серверы и прочие внешние инструменты.\n\n### Правило зависимостей (Dependency Rule)\n\nНичто во внутреннем слое не должно знать о чём-либо во внешнем слое. Имена, типы, классы — ничто, объявленное во внешнем слое, не должно упоминаться во внутреннем.\n\n### Типичная структура пакетов в Java-проекте\n\n```\ncom.bank.payment\n├── domain\u002F                     # Entities\n│   ├── model\u002F\n│   │   ├── Payment.java\n│   │   └── Money.java\n│   └── port\u002F\n│       ├── in\u002F\n│       │   └── CreatePaymentUseCase.java\n│       └── out\u002F\n│           └── PaymentRepository.java\n├── application\u002F                # Use Cases\n│   └── CreatePaymentService.java\n├── adapter\u002F                    # Interface Adapters\n│   ├── in\u002F\n│   │   └── web\u002F\n│   │       └── PaymentController.java\n│   └── out\u002F\n│       └── persistence\u002F\n│           ├── PaymentJpaRepository.java\n│           └── PaymentEntity.java\n└── config\u002F                     # Frameworks & Drivers\n    └── PaymentBeanConfig.java\n```\n\n### Отличие от гексагональной архитектуры\n\nКонцептуально Clean Architecture и Hexagonal Architecture очень похожи. Главное отличие — Clean Architecture явно выделяет слой Use Cases и описывает чёткую иерархию из четырёх колец, тогда как гексагональная архитектура фокусируется на портах и адаптерах без строгой внутренней стратификации ядра.\n\n> **На собеседовании:** Интервьюер проверяет, понимаете ли вы Dependency Rule и можете ли объяснить, почему Entity не должен импортировать Spring-аннотации. Частая ошибка — не уметь объяснить отличие Clean Architecture от гексагональной и луковой.","","middle",[15,16,17,18],"clean-architecture","solid","uncle-bob","architecture",[],null,{"title":22,"description":23,"ogTitle":22,"ogDescription":24,"keywords":25,"schemaAnswer":32,"featuredSnippetReady":33},"Clean Architecture (чистая архитектура) — Gymterview","Clean Architecture Роберта Мартина: зависимости направлены только внутрь. Entities, Use Cases, Interface Adapters, Frameworks. Структура пакетов в Java.","Clean Architecture Роберта Мартина: зависимости направлены только внутрь — от внешних слоёв к внутренним.",[26,27,28,29,30,31],"Clean Architecture","чистая архитектура","Роберт Мартин","Uncle Bob","Dependency Rule","правило зависимостей","Clean Architecture — концепция Роберта Мартина, основной принцип которой: зависимости направлены только внутрь. Состоит из четырёх слоёв: Entities (бизнес-объекты и правила), Use Cases (сценарии использования), Interface Adapters (контроллеры, презентеры, маппинг) и Frameworks & Drivers (фреймворки, БД, веб-серверы). Правило зависимостей гласит: ничто во внутреннем слое не должно знать о внешнем слое. Отличие от гексагональной архитектуры — явное выделение слоя Use Cases и чёткая иерархия из четырёх колец.",true]