Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Федор Щудло "Эволюция Enterprise-архитектур. От MVC до Clean Architecture"

Федор Щудло "Эволюция Enterprise-архитектур. От MVC до Clean Architecture"

Расскажу историю развития архитектур enterprise-приложений, начиная от MVC 70-х годов и до Clean Architecture.
Рассматривая подходы последовательно, гораздо легче понять логику развития, что упрощает понимание каждой отдельно взятой архитектуры.
Также обговорим различия между архитектурами "Ports and Adapters", "Onion Architecture" и "Clean Architecture", которые многие считают одним и тем же.

DotNetRu

June 20, 2019
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. 1. Современные архитектуры сложные. Ретроспективно их понять легче 2. Отбрасывать

    лишнее (crucial), добавлять собственное. Предсказывать будущее ☺ Зачем знать историю? 2
  2. 6

  3. 7

  4. 1. Low coupling 2. Don’t Repeat Yourself 3. Баланс и

    здравый смысл Хорошая архитектура 12
  5. Отделяет бизнес-логику от представления Множество вариаций по логике взаимодействия Множество

    вариаций под конкретные среды User Interactions View Controller Model Model-View- Controller (1979) 14
  6. View стал проще благодаря технологиям Controller - цикломатическая сложность 1

    Прямая связь Model-View нехорошо Сложность Model выросла, получил свои архитектуры MV-* (Наши дни) View Model Controller DTO 15
  7. Отдельные слои с собственными тактическими шаблонами Четкая иерархия связей Полное

    отделение бизнес-логики от БД Трехслойная архитектура (2002) Presentation Business Logic Data Access 16
  8. База Данных – не главное и лишь инфраструктура Больше слоев

    и разделение на use cases Bounded Contexts, Shared Kernel, Anti Corruption Layer Domain Driven Design (2003) User Interface Application Domain Infrastructure 17
  9. Domain это ключевое ядро системы в полной изоляции от технических

    деталей Последовательность вызова вместо иерархии Разворот зависимости Data Access -> Domain Работа с Presentation/ Infrastructure через порты Ports And Adapters (2005) Business Logic Customer GUI Admin GUI Console Commands MySQL DB Email lib Elastic Search lib ORM lib 18
  10. Ports And Adapters (2005) Rest Controllers Console Commands Customer GUI

    Admin GUI MySQL DB Business Logic SMS lib Email lib Elastic Search lib ORM lib Domain это ключевое ядро системы в полной изоляции от технических деталей Последовательность вызова вместо иерархии Разворот зависимости Data Access -> Domain Работа с Presentation/ Infrastructure через порты 19
  11. 20 Rest Controllers Console Commands Admin GUI MySQL DB Business

    Logic SMS lib Email lib Elastic Search ORM lib Business Logic Business Logic
  12. Деление ядра системы на три отдельных слоя Зависимости только внутрь

    Dependency Inversion Principle - архитектурный принцип Бизнес-логика работоспособна даже без внешних слоев Onion Architecture (2008) Domain Model Infrastructure App Services User Interface Domain Services Application Core Tests DB Web Service Dependency goes inwards 21
  13. Деление и «горизонтально» и «вертикально» (SRP) Направление зависимостей по уровню

    компонента Закрепление базовых принципов (DI, SRP, OCP) Clean Architecture (2012) Entitles External Interfaces Use Cases Controllers DB UI 22 Use Case Interactor Use Case Output Port Use Case Input Port Controller Presenter Flow of control
  14. Что дальше? 23 1. Понять сложность своего проекта 2. Взять

    соразмерную архитектуру 3. Выбросить все лишнее (YAGNI)
  15. Is this Architecture? Would you pay an architect for this?

    Шутка позаимствована из книги 37 Things One Architect Knows About IT Transformation 24
  16. 37 Things One Architect Knows About IT Transformation by Gregor

    Hohpe Object-Oriented Software Engineering by Ivar Jacobson Clean Architecture: A Craftsman's Guide to Software Structure and Design by Robert Martin C4 Model способ описания сложных архитектур во всех аспектах Что еще Почитать 26
  17. CQRS, Event Sourcing low coupling на стероидах SOA, Microservices low

    coupling на уровне процессов Посмотреть (еще раз) Что еще 27