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

Алексей Мерсон «ASP.NET Boilerplate: фреймворк ...

Алексей Мерсон «ASP.NET Boilerplate: фреймворк по заветам Domain Driven Design»

Суть Domain Driven Design лежит вне технической плоскости, а применять его можно в любом проекте, независимо от стека и масштаба. Однако если проект большой, сложно обойтись без применения тактических паттернов DDD, таких как репозиторий, сервис, спецификация и др. Что же делать, если готовых наработок нет, а дедлайн не за горами? На помощь приходит ASP.NET Boilerplate, фреймворк для разработки приложений, в котором уже реализованы лучшие практики применения DDD. Поговорим не только о фреймворке в целом, но и об успешном опыте его использования в реальном проекте.

DotNetRu

June 21, 2018
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. Domain Driven Design: Стратегическое проектирование Взаимодействие между людьми Подходы к

    архитектуре Тактические паттерны Борьба со сложностью 2
  2. Domain Driven Design: Стратегическое проектирование Взаимодействие между людьми Подходы к

    архитектуре Тактические паттерны Борьба со сложностью 3
  3. Domain Driven Design: Стратегическое проектирование Взаимодействие между людьми Подходы к

    архитектуре Тактические паттерны Борьба со сложностью 4
  4. 6

  5. 7

  6. 8

  7. 9

  8. 10

  9. 11 • SaaS-ready: поддержка мультитенантности из коробки • TenantId в

    сущностях, сессии и пр. • Фильтры на уровне репозитория • Отключается
  10. 12 • Своя абстракция над Castle.Windsor • Управление зависимостями на

    уровне модулей • Инфраструктура для АОП • Огромное количество точек расширения
  11. 13 • Своя абстракция для управления настройками • Области видимости

    • Хранение в базе • Интеграция с клиентской частью
  12. • Своя абстракция для логгирования • Отладочные логи модулей •

    Логгер в базовых классах для удобства 14 • Базовый аудит из коробки • Аудит изменений сущностей • Управление атрибутами • Гибкая настройка
  13. • Своя подсистема кэширования • Отдельный механизм для сущностей •

    Интеграция с Redis 15 • Абстракция над автомаппером • Управление атрибутами • Возможность использовать обычные профили
  14. 16

  15. 17 • Автоматическое управление транзакциями и соединениями • Из коробки

    в application-сервисах и репозиториях • Гибкое управление вложенными транзакциями
  16. 19 • Информация о TenantId, UserId, TenantSide • Не привязана

    к ASP.NET • Поддержка имперсонирвания
  17. Немного фактов • 50 проектов в солюшене • 3 SPA-портала

    (AngularJS, WebAPI2) • 13 Windows-сервисов • 5 вспомогательных приложений (Console/WinForms) • Большое количество 3rd-party интеграций • 2 (два) автоматических теста 24
  18. Немного фактов • 7.5 разработчиков • 2.5 тестировщика • 6

    менеджеров разной степени эффективности • 132 страницы в ТЗ • 9 месяцев активной разработки 25
  19. Модульная архитектура • Модуль – наследник AbpModule • Одна сборка

    – один модуль • Зависимости с помощью атрибутов • Несколько этапов инициализации • Инфраструктура для плагинов 30
  20. Подытожим • Очень много «из коробки»: • Шаблоны и примеры

    • Реализация паттернов и архитектуры • Интеграция • Подробная и актуальная документация • Активно развивается • Использует DDD-подход • Можно брать за основу для своих разработок 33 • Архитектурно перегружен • Не подходит для хайлоад • Недостаточно гибкий • Слишком гибкий • Шаг влево, шаг вправо – высокий порог входа • Нет поддержки от крупных вендоров Плюсы: Минусы: