[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-arkhitektura-prilozheniy-chto-takoe-onion-architecture-lukovaya-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":18,"progress":19,"seo":20},122,"chto-takoe-onion-architecture-lukovaya-arkhitektura",3,"arkhitektura-prilozheniy","Архитектура приложений","🏗️","Что такое Onion Architecture (луковая архитектура)","Onion Architecture (луковая архитектура) — архитектурный стиль, предложенный Джеффри Палермо, который, как и Clean Architecture, строится на принципе: зависимости направлены только к центру.\n\n### Диаграмма слоёв\n\n```\n┌────────────────────────────────────────────────────┐\n│               Infrastructure                       │\n│  (Spring, JPA, REST, Kafka, файловая система)      │\n│  ┌──────────────────────────────────────────────┐  │\n│  │          Application Services                │  │\n│  │    (Use Cases, оркестрация, DTO)             │  │\n│  │  ┌────────────────────────────────────────┐  │  │\n│  │  │        Domain Services                 │  │  │\n│  │  │  (доменные сервисы, правила)           │  │  │\n│  │  │  ┌──────────────────────────────────┐  │  │  │\n│  │  │  │        Domain Model              │  │  │  │\n│  │  │  │  (Entities, Value Objects)       │  │  │  │\n│  │  │  └──────────────────────────────────┘  │  │  │\n│  │  └────────────────────────────────────────┘  │  │\n│  └──────────────────────────────────────────────┘  │\n└────────────────────────────────────────────────────┘\n```\n\n### Слои (от центра к периферии)\n\n- **Domain Model** — сущности, Value Objects, доменные события. Не зависит ни от чего.\n- **Domain Services** — доменная логика, которая не принадлежит конкретной сущности.\n- **Application Services** — координация сценариев, управление транзакциями.\n- **Infrastructure** — реализации репозиториев, внешние сервисы, фреймворки.\n\n### Ключевые правила\n\n- Интерфейсы репозиториев определяются в доменном слое.\n- Реализации репозиториев находятся в инфраструктурном слое.\n- Доменная модель не зависит от фреймворков.\n\n### Сравнение Clean, Hexagonal и Onion Architecture\n\nВсе три архитектуры преследуют одну цель — изоляция бизнес-логики от инфраструктуры. Различия заключаются в терминологии и акцентах:\n\n| Аспект | Hexagonal | Clean | Onion |\n|--------|-----------|-------|-------|\n| Автор | Алистер Кокберн | Роберт Мартин | Джеффри Палермо |\n| Акцент | Порты и адаптеры | Правило зависимостей, 4 кольца | Слои вокруг доменной модели |\n| Центр | Domain + Application | Entities | Domain Model |\n| Кол-во слоёв | 2-3 (ядро, порты, адаптеры) | 4 (Entities, Use Cases, Adapters, Frameworks) | 4 (Domain, Domain Services, App Services, Infra) |\n\n> **На собеседовании:** Интервьюер часто спрашивает Onion вместе с Clean и Hexagonal — важно показать, что вы понимаете их общую идею (инверсия зависимостей) и можете назвать конкретные отличия. Частая ошибка — считать эти три архитектуры совершенно разными подходами, а не вариациями одной идеи.","","middle",[15,16,17],"onion-architecture","domain-model","architecture",[],null,{"title":21,"description":22,"ogTitle":21,"ogDescription":23,"keywords":24,"schemaAnswer":30,"featuredSnippetReady":31},"Onion Architecture (луковая архитектура) — Gymterview","Onion Architecture Джеффри Палермо: зависимости направлены к центру. Слои: Domain Model, Domain Services, Application Services, Infrastructure.","Onion Architecture — архитектурный стиль, в котором зависимости направлены к центру: от инфраструктуры к доменной модели.",[25,26,27,28,29],"Onion Architecture","луковая архитектура","Джеффри Палермо","Domain Model","слои архитектуры","Onion Architecture — архитектурный стиль, предложенный Джеффри Палермо, где зависимости направлены только к центру. Слои от центра к периферии: Domain Model (сущности, Value Objects), Domain Services (доменная логика), Application Services (координация сценариев, транзакции) и Infrastructure (реализации репозиториев, фреймворки). Интерфейсы репозиториев определяются в доменном слое, а реализации — в инфраструктурном. Концептуально схожа с Clean и Hexagonal Architecture, но акцентирует слои вокруг доменной модели.",true]