[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-arkhitektura-prilozheniy-chto-takoe-mnogosloynaya-layered-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},119,"chto-takoe-mnogosloynaya-layered-arkhitektura",3,"arkhitektura-prilozheniy","Архитектура приложений","🏗️","Что такое многослойная (layered) архитектура","Многослойная (layered) архитектура — один из наиболее распространённых архитектурных паттернов, при котором система разделяется на горизонтальные слои, каждый из которых выполняет определённую роль. Каждый слой зависит только от нижележащего. Это похоже на этажи здания: каждый этаж опирается на тот, что под ним, и не зависит от того, что над ним.\n\n### Классическая трёхслойная архитектура в Spring-приложении\n\n```\n        HTTP-запрос\n             │\n             ▼\n┌─────────────────────────┐\n│   Controller (Web слой) │  ← Принимает запросы, валидирует входные данные,\n│   @RestController       │     возвращает ответы (DTO)\n└────────────┬────────────┘\n             │\n             ▼\n┌─────────────────────────┐\n│   Service (Бизнес-слой) │  ← Содержит бизнес-логику,\n│   @Service              │     оркестрирует вызовы\n└────────────┬────────────┘\n             │\n             ▼\n┌─────────────────────────┐\n│  Repository (Слой       │  ← Работает с БД,\n│  доступа к данным)      │     выполняет CRUD-операции\n│  @Repository            │\n└────────────┬────────────┘\n             │\n             ▼\n        ┌─────────┐\n        │   БД    │\n        └─────────┘\n```\n\n### Пример на Java (Spring Boot)\n\n\u003Cdetails>\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Controller — Web-слой\n@RestController\n@RequestMapping(\"\u002Fapi\u002Faccounts\")\npublic class AccountController {\n\n    private final AccountService accountService;\n\n    public AccountController(AccountService accountService) {\n        this.accountService = accountService;\n    }\n\n    @GetMapping(\"\u002F{id}\")\n    public ResponseEntity\u003CAccountDto> getAccount(@PathVariable Long id) {\n        AccountDto account = accountService.findById(id);\n        return ResponseEntity.ok(account);\n    }\n\n    @PostMapping(\"\u002Ftransfer\")\n    public ResponseEntity\u003CVoid> transfer(@RequestBody @Valid TransferRequest request) {\n        accountService.transfer(request);\n        return ResponseEntity.ok().build();\n    }\n}\n\n\u002F\u002F Service — бизнес-слой\n@Service\n@Transactional\npublic class AccountService {\n\n    private final AccountRepository accountRepository;\n\n    public AccountService(AccountRepository accountRepository) {\n        this.accountRepository = accountRepository;\n    }\n\n    public AccountDto findById(Long id) {\n        Account account = accountRepository.findById(id)\n            .orElseThrow(() -> new AccountNotFoundException(id));\n        return AccountMapper.toDto(account);\n    }\n\n    public void transfer(TransferRequest request) {\n        Account from = accountRepository.findById(request.getFromId())\n            .orElseThrow(() -> new AccountNotFoundException(request.getFromId()));\n        Account to = accountRepository.findById(request.getToId())\n            .orElseThrow(() -> new AccountNotFoundException(request.getToId()));\n\n        from.withdraw(request.getAmount());\n        to.deposit(request.getAmount());\n\n        accountRepository.save(from);\n        accountRepository.save(to);\n    }\n}\n\n\u002F\u002F Repository — слой доступа к данным\n@Repository\npublic interface AccountRepository extends JpaRepository\u003CAccount, Long> {\n    List\u003CAccount> findByClientId(Long clientId);\n}\n```\n\n\u003C\u002Fdetails>\n\n### Правила многослойной архитектуры\n\n- Каждый слой зависит только от слоя непосредственно ниже.\n- Слой не должен знать о вышестоящем слое.\n- Слой может быть заменён без влияния на остальные (при соблюдении контракта).\n- Бизнес-логика сосредоточена в Service-слое.\n\n### Плюсы\n\n- Простота понимания и низкий порог входа.\n- Разделение ответственности.\n- Возможность независимого тестирования каждого слоя.\n\n### Минусы\n\n- Зависимость бизнес-логики от инфраструктуры (Service знает про Repository).\n- Склонность к «анемичной» модели данных (логика в сервисах, сущности — просто контейнеры данных).\n- При большом количестве модулей слои «размываются».\n\n> **На собеседовании:** Важно показать, что вы понимаете правило зависимостей (сверху вниз) и можете объяснить, почему Controller не должен обращаться напрямую к Repository. Частая ошибка — путать многослойную архитектуру с гексагональной, не видя принципиальной разницы в направлении зависимостей.","","junior",[15,16,17,18],"spring","patterns","architecture","layered",[],null,{"title":22,"description":23,"ogTitle":22,"ogDescription":24,"keywords":25,"schemaAnswer":31,"featuredSnippetReady":32},"Многослойная (layered) архитектура — Gymterview","Многослойная архитектура — паттерн, при котором система разделяется на горизонтальные слои: Controller, Service, Repository. Каждый слой зависит от нижележащего.","Многослойная архитектура — паттерн, при котором система разделяется на горизонтальные слои, каждый из которых зависит только от нижележащего.",[26,27,28,29,30],"многослойная архитектура","layered architecture","трёхслойная архитектура","Controller Service Repository","Spring Boot слои","Многослойная (layered) архитектура — один из наиболее распространённых архитектурных паттернов, при котором система разделяется на горизонтальные слои, каждый из которых выполняет определённую роль и зависит только от нижележащего. Классическая трёхслойная архитектура в Spring включает Controller (Web-слой, принимает запросы), Service (бизнес-слой, содержит бизнес-логику) и Repository (слой доступа к данным, выполняет CRUD-операции).",true]