ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»
Online WDDay 2021
https://wdday.org/
Facebook: https://www.facebook.com/wdday.org
Linkedin: https://www.linkedin.com/company/wdday
ВЛАДИСЛАВ ЄРМОЛАЄВ «Чому варто використовувати CSS Grid Layout на реальних пр...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» Online WDDay 2021
1. С помощью чего пишутся
серьезные веб приложения на
.NET?
Виталий Гончарук
2. Vitalii Honcharuk
Lead Full-stack Software Engineer
C# .NET, Angular, SQL, Azure
7+ years of exp
linkedin.com/in/vitalii-honcharuk
github.com/vit-h
3. Как пишутся серьезные веб приложения?
1 выявляются потребности бизнеса
2 разбиваются на домены и поддомены, пишутся требования
3 закладывается архитектура, выбирается облако и сторонние сервисы
4 выбираются технологии для реализации поставленных задач
5 закладывается инфраструктура и типовой шаблон микросервисов
6 (разработка + тестировани) x n ; релиз x m; поддержка...
5. План
- MediatR
- NSwag
- FluentValidation
- FluentAssertions
- Moq
- Respawn
- Bogus
- Diagnostics.HealthChecks
- SpecFlow
- EFCore и EFCore.BulkExtensions
- Handlebars.Net
- Polly
- Refit
- Hangfire
О чем мы поговорим:
6. MediatR
Для чего?
- строить систему через паттерн
медиатор
- как часть для реализации CQS and CQRS
- чтобы уменьшить связанность слоев
- скрыть зависимости
- иметь атомарную логику
- менять взаимодействия между
компонентами независимо
- разрабатывать когда много
неизвестных
Какова цена?
- чуть сложнее дебажить
- шанс иметь команду со сломанным хендлером или
без
Состоит из:
- request (команды/квери)
- notification (оповещения)
- handler (обработчики)
- behaviours (как middleware)
- validators
7. NSwag
Для чего?
- Swagger UI и Swagger генератор
- чтоб иметь Open API
- для генерации клиентов для API на C# и JS(TS)
фреймворков
- можно генерировать клиентов на лету
потребляя существующее приложение со
свагером
- можно генерировать C# контроллеры
Основное:
- Swagger
- Open API
- генерация
моделей и клиентов
Note: Для генерации клиента из запущенного
свагера можно использовать nswag npm пакет.
8. FluentValidation
Для чего?
- отделение модели и правил валидации
- читаемости и удобство описания правил валидации
- отличная скорость выполнения, правила неизменяемы
и могут быть переиспользованы
- легкость покрытия тестами правил валидации
9. Entity Framework Core
Для чего?
- кроссплатформенный универсальный ORM для SQL баз
- генерация моделей и методов отсканировав базу
- генерация базы на основе моделей и связей
- генерация SQL запросов из LINQ запросов на C#
- автоматические миграции и версионирование
- чтоб начать можно не знать SQL и не думать о базе
EFCore.BulkExtensions
Для чего?
- для усиления Entity Framework для работы с BULK операциями
- Bulk operations (Insert, Update, Delete, Read, Upsert, Sync, Truncate)
- Batch ops (Delete, Update)
10. Bogus
Для чего?
- удобная генерация реалистичных данных на разные темы
- чтобы симулировать продакшн данные
- проверить работоспособность и UI системы с разной длиной
данных
- множество встроенных генераторов
- генерация данных в зависимости от уже сгенерированных
полей
- fluent синтаксис
Хорош для:
- генерация тестовы данных на локальных или тестовых
средах
- для интеграционных, юнит тестов и автоматизированного
тестирования
11. Microsoft.Extensions.Diagnostics.HealthChecks
Для чего?
- для проверки здоровья сервисов, их компонентов и зависимостей
- знать когда откатывать деплоймент или рестартовать контейнер
- знать когда уводить трафик от сломанного сервиса
- для мониторинга памяти, диска и других физических ресурсов
Хорош для:
- оркестрации контейнеров и балансировщиков нагрузки
- CI/CD
- мониторинга чтоб быстро найти нездоровые компоненты
- тестеров чтоб проводить тестирование только на здоровой
среде
12. SpecFlow
Для чего?
- для BDD (Behavior-Driven Development) чтоб разработчики, тестировщики,
продакты имели общее понимание системы и требования закрепленные
в код
- переиспользовать шаги из тестов в других
- транслировать требования написанные на человеческом языке в код
тестов, требования должны использовать Gherkin (Given/When/Then)
Зачем BDD?
- минимизировать переделки благодаря совместной работе и пониманию
- быстрые отзывы, лучшая эффективность благодаря гранулярным
требованиям
- единый источник правды
- фокус на нуждах бизнеса
- качество кода благодаря разработке через приемочное тестирование
13. Unit/Integration тесты
FluentAssertions - интуитивный синтаксис для проверок
- читабельность, удобство, скорость разработки
- богатый функционал
- возможность добавки пояснений в проверки
Respawn - для откатывания тестовых SQL баз данных до
состояния перед тестом вместо того чтоб удалять данные
вручную или откатывать транзакцию.
Moq - удобные моки и стабы
- изоляция юнитов от зависимостей
- установка поведения и возвращаемых значений для
проверки особенных путей выполнения
- проверка переданных параметров на специфичные
условия
14. Handlebars.Net
Для чего? - генератор шаблонов
- генерация шаблонов с динамическим контентом, к примеру отчеты в
HTML или сложное тело письма с перечислениями и другими вставками
- имеет множество операторов препроцессинга, похож на Angular
синтаксис
- удобно встраивать свои форматеры
- быстро работает, т.к. компилирует шаблон в IL код
- соответствует синтаксису Handlebars.js но не требует браузера или
Node.js
15. Polly
Для чего? - для поддержки устойчивости
- может повторять неуспешные запросы
- кешировать предыдущие ответы
- недопущение вызовов на сломанные сервисы
- отменять запросы которые выполняются слишком долго
- возвращать дефолтный ответ когда всё упало
Когда использовать?
- при повторении запроса на удаленный сервис
который пока недоступен
- при переаутентификации перед повторением
попытки
- когда надо больше чем просто ретрай
- для предотвращения цепочки падений или
тормозов в микросервисах
16. Refit
Для чего?
- автоматический типизированный генератор REST клиента
по интерфейсу и атрибутам
- легко генерировать клиент на незнакомый REST API в паре
с использованием Visual Studio’s “Paste JSON as classes”
17. Hangfire
Для чего? - создавать и управлять background операциями
- выносить операции которые не положишь в обработчик
запроса
- для коротких, длинных, CPU и I/O тяжелых, одноразовых,
повторяющихся и отсроченных операций
- для обработки с использованием очередей
- для автоматических повторений
- иметь веб интерфейс управления всем этим
18. Спасибо за внимание!
Vitalii Honcharuk
Задавайте ваши вопросы голосом или в чат!
Примеры:
github.com/vit-h/SimpleArchitecture