SlideShare a Scribd company logo
1 of 18
Download to read offline
С помощью чего пишутся
серьезные веб приложения на
.NET?
Виталий Гончарук
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
Как пишутся серьезные веб приложения?
1 выявляются потребности бизнеса
2 разбиваются на домены и поддомены, пишутся требования
3 закладывается архитектура, выбирается облако и сторонние сервисы
4 выбираются технологии для реализации поставленных задач
5 закладывается инфраструктура и типовой шаблон микросервисов
6 (разработка + тестировани) x n ; релиз x m; поддержка...
С помощью чего пишутся серьезные веб приложения?
План
- MediatR
- NSwag
- FluentValidation
- FluentAssertions
- Moq
- Respawn
- Bogus
- Diagnostics.HealthChecks
- SpecFlow
- EFCore и EFCore.BulkExtensions
- Handlebars.Net
- Polly
- Refit
- Hangfire
О чем мы поговорим:
MediatR
Для чего?
- строить систему через паттерн
медиатор
- как часть для реализации CQS and CQRS
- чтобы уменьшить связанность слоев
- скрыть зависимости
- иметь атомарную логику
- менять взаимодействия между
компонентами независимо
- разрабатывать когда много
неизвестных
Какова цена?
- чуть сложнее дебажить
- шанс иметь команду со сломанным хендлером или
без
Состоит из:
- request (команды/квери)
- notification (оповещения)
- handler (обработчики)
- behaviours (как middleware)
- validators
NSwag
Для чего?
- Swagger UI и Swagger генератор
- чтоб иметь Open API
- для генерации клиентов для API на C# и JS(TS)
фреймворков
- можно генерировать клиентов на лету
потребляя существующее приложение со
свагером
- можно генерировать C# контроллеры
Основное:
- Swagger
- Open API
- генерация
моделей и клиентов
Note: Для генерации клиента из запущенного
свагера можно использовать nswag npm пакет.
FluentValidation
Для чего?
- отделение модели и правил валидации
- читаемости и удобство описания правил валидации
- отличная скорость выполнения, правила неизменяемы
и могут быть переиспользованы
- легкость покрытия тестами правил валидации
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)
Bogus
Для чего?
- удобная генерация реалистичных данных на разные темы
- чтобы симулировать продакшн данные
- проверить работоспособность и UI системы с разной длиной
данных
- множество встроенных генераторов
- генерация данных в зависимости от уже сгенерированных
полей
- fluent синтаксис
Хорош для:
- генерация тестовы данных на локальных или тестовых
средах
- для интеграционных, юнит тестов и автоматизированного
тестирования
Microsoft.Extensions.Diagnostics.HealthChecks
Для чего?
- для проверки здоровья сервисов, их компонентов и зависимостей
- знать когда откатывать деплоймент или рестартовать контейнер
- знать когда уводить трафик от сломанного сервиса
- для мониторинга памяти, диска и других физических ресурсов
Хорош для:
- оркестрации контейнеров и балансировщиков нагрузки
- CI/CD
- мониторинга чтоб быстро найти нездоровые компоненты
- тестеров чтоб проводить тестирование только на здоровой
среде
SpecFlow
Для чего?
- для BDD (Behavior-Driven Development) чтоб разработчики, тестировщики,
продакты имели общее понимание системы и требования закрепленные
в код
- переиспользовать шаги из тестов в других
- транслировать требования написанные на человеческом языке в код
тестов, требования должны использовать Gherkin (Given/When/Then)
Зачем BDD?
- минимизировать переделки благодаря совместной работе и пониманию
- быстрые отзывы, лучшая эффективность благодаря гранулярным
требованиям
- единый источник правды
- фокус на нуждах бизнеса
- качество кода благодаря разработке через приемочное тестирование
Unit/Integration тесты
FluentAssertions - интуитивный синтаксис для проверок
- читабельность, удобство, скорость разработки
- богатый функционал
- возможность добавки пояснений в проверки
Respawn - для откатывания тестовых SQL баз данных до
состояния перед тестом вместо того чтоб удалять данные
вручную или откатывать транзакцию.
Moq - удобные моки и стабы
- изоляция юнитов от зависимостей
- установка поведения и возвращаемых значений для
проверки особенных путей выполнения
- проверка переданных параметров на специфичные
условия
Handlebars.Net
Для чего? - генератор шаблонов
- генерация шаблонов с динамическим контентом, к примеру отчеты в
HTML или сложное тело письма с перечислениями и другими вставками
- имеет множество операторов препроцессинга, похож на Angular
синтаксис
- удобно встраивать свои форматеры
- быстро работает, т.к. компилирует шаблон в IL код
- соответствует синтаксису Handlebars.js но не требует браузера или
Node.js
Polly
Для чего? - для поддержки устойчивости
- может повторять неуспешные запросы
- кешировать предыдущие ответы
- недопущение вызовов на сломанные сервисы
- отменять запросы которые выполняются слишком долго
- возвращать дефолтный ответ когда всё упало
Когда использовать?
- при повторении запроса на удаленный сервис
который пока недоступен
- при переаутентификации перед повторением
попытки
- когда надо больше чем просто ретрай
- для предотвращения цепочки падений или
тормозов в микросервисах
Refit
Для чего?
- автоматический типизированный генератор REST клиента
по интерфейсу и атрибутам
- легко генерировать клиент на незнакомый REST API в паре
с использованием Visual Studio’s “Paste JSON as classes”
Hangfire
Для чего? - создавать и управлять background операциями
- выносить операции которые не положишь в обработчик
запроса
- для коротких, длинных, CPU и I/O тяжелых, одноразовых,
повторяющихся и отсроченных операций
- для обработки с использованием очередей
- для автоматических повторений
- иметь веб интерфейс управления всем этим
Спасибо за внимание!
Vitalii Honcharuk
Задавайте ваши вопросы голосом или в чат!
Примеры:
github.com/vit-h/SimpleArchitecture

More Related Content

What's hot

PowerShell DSC и SharePoint 2016
PowerShell DSC и SharePoint 2016PowerShell DSC и SharePoint 2016
PowerShell DSC и SharePoint 2016Vitaly Zhukov
 
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.odnoklassniki.ru
 
!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture!2hl++2008 Restful Architechture
!2hl++2008 Restful ArchitechtureOntico
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрийsolit
 
Managing thousands of servers at OK.RU
Managing thousands of servers at OK.RUManaging thousands of servers at OK.RU
Managing thousands of servers at OK.RUAleksey Chudov
 
SQL Server Security Best Practices - Евгений Недашковский
SQL Server Security Best Practices - Евгений НедашковскийSQL Server Security Best Practices - Евгений Недашковский
SQL Server Security Best Practices - Евгений НедашковскийHackIT Ukraine
 
Базовые принципы работы с SVN.
Базовые принципы работы с SVN.Базовые принципы работы с SVN.
Базовые принципы работы с SVN.DressTester
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Шифрование, как единственный способ защиты информации - Михаил Синцов
Шифрование, как единственный способ защиты информации - Михаил СинцовШифрование, как единственный способ защиты информации - Михаил Синцов
Шифрование, как единственный способ защиты информации - Михаил СинцовHackIT Ukraine
 
В поисках магической кнопки, или как воспитать SoapUI
В поисках магической кнопки, или как воспитать SoapUIВ поисках магической кнопки, или как воспитать SoapUI
В поисках магической кнопки, или как воспитать SoapUISQALab
 
Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Artur Baranok
 
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервереAndrew Sovtsov
 
системы контроля версий
системы контроля версийсистемы контроля версий
системы контроля версийDressTester
 
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011camp_drupal_ua
 

What's hot (20)

PowerShell DSC и SharePoint 2016
PowerShell DSC и SharePoint 2016PowerShell DSC и SharePoint 2016
PowerShell DSC и SharePoint 2016
 
алексей диплом презентация
алексей диплом презентацияалексей диплом презентация
алексей диплом презентация
 
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.Управление тысячами серверов в Одноклассниках. Алексей Чудов.
Управление тысячами серверов в Одноклассниках. Алексей Чудов.
 
Chudov
ChudovChudov
Chudov
 
!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
 
Managing thousands of servers at OK.RU
Managing thousands of servers at OK.RUManaging thousands of servers at OK.RU
Managing thousands of servers at OK.RU
 
REST
RESTREST
REST
 
SQL Server Security Best Practices - Евгений Недашковский
SQL Server Security Best Practices - Евгений НедашковскийSQL Server Security Best Practices - Евгений Недашковский
SQL Server Security Best Practices - Евгений Недашковский
 
Базовые принципы работы с SVN.
Базовые принципы работы с SVN.Базовые принципы работы с SVN.
Базовые принципы работы с SVN.
 
DATA CLUSTER
DATA CLUSTERDATA CLUSTER
DATA CLUSTER
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Шифрование, как единственный способ защиты информации - Михаил Синцов
Шифрование, как единственный способ защиты информации - Михаил СинцовШифрование, как единственный способ защиты информации - Михаил Синцов
Шифрование, как единственный способ защиты информации - Михаил Синцов
 
В поисках магической кнопки, или как воспитать SoapUI
В поисках магической кнопки, или как воспитать SoapUIВ поисках магической кнопки, или как воспитать SoapUI
В поисках магической кнопки, или как воспитать SoapUI
 
IIS7 possibilities
IIS7 possibilitiesIIS7 possibilities
IIS7 possibilities
 
Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...
 
Azure - обзор
Azure - обзорAzure - обзор
Azure - обзор
 
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
20160316 Работа с подготовленными заранее опросниками, хранимыми на сервере
 
системы контроля версий
системы контроля версийсистемы контроля версий
системы контроля версий
 
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
 

Similar to ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» Online WDDay 2021

битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиковMedia Gorod
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Media Gorod
 
"Пряники" - система мотивации и Microsoft Azure
"Пряники" - система мотивации и Microsoft  Azure"Пряники" - система мотивации и Microsoft  Azure
"Пряники" - система мотивации и Microsoft AzureAlexey Lyubko
 
Евгений Аралов
Евгений АраловЕвгений Аралов
Евгений АраловSEO.UA
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKCisco Russia
 
Архитектура и технологии Pryaniky.com
Архитектура и технологии Pryaniky.comАрхитектура и технологии Pryaniky.com
Архитектура и технологии Pryaniky.comPryaniky.com
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
Основные аспекты управления веб-проектом в Microsoft Azure Websites
Основные аспекты управления веб-проектом в Microsoft Azure WebsitesОсновные аспекты управления веб-проектом в Microsoft Azure Websites
Основные аспекты управления веб-проектом в Microsoft Azure WebsitesArtur Baranok
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéInterSystems CEE
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukInterSystems
 
Новые возможности по разработке приложений (ADF, SOA, BPM)
Новые возможности по разработке приложений (ADF, SOA, BPM)Новые возможности по разработке приложений (ADF, SOA, BPM)
Новые возможности по разработке приложений (ADF, SOA, BPM)Andrey Akulov
 
Sql Server Data Services
Sql Server Data ServicesSql Server Data Services
Sql Server Data ServicesMedia Gorod
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийMedia Gorod
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)Sergey Skvortsov
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
AiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управленияAiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управленияКварта Технологии
 

Similar to ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» Online WDDay 2021 (20)

битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиков
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
 
"Пряники" - система мотивации и Microsoft Azure
"Пряники" - система мотивации и Microsoft  Azure"Пряники" - система мотивации и Microsoft  Azure
"Пряники" - система мотивации и Microsoft Azure
 
Евгений Аралов
Евгений АраловЕвгений Аралов
Евгений Аралов
 
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
 
Архитектура и технологии Pryaniky.com
Архитектура и технологии Pryaniky.comАрхитектура и технологии Pryaniky.com
Архитектура и технологии Pryaniky.com
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
Основные аспекты управления веб-проектом в Microsoft Azure Websites
Основные аспекты управления веб-проектом в Microsoft Azure WebsitesОсновные аспекты управления веб-проектом в Microsoft Azure Websites
Основные аспекты управления веб-проектом в Microsoft Azure Websites
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для Caché
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Web and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard LebedyukWeb and mobile development for intersystems caché, Eduard Lebedyuk
Web and mobile development for intersystems caché, Eduard Lebedyuk
 
Новые возможности по разработке приложений (ADF, SOA, BPM)
Новые возможности по разработке приложений (ADF, SOA, BPM)Новые возможности по разработке приложений (ADF, SOA, BPM)
Новые возможности по разработке приложений (ADF, SOA, BPM)
 
Sql Server Data Services
Sql Server Data ServicesSql Server Data Services
Sql Server Data Services
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
AiCare - self-organizing device management service
AiCare - self-organizing device management serviceAiCare - self-organizing device management service
AiCare - self-organizing device management service
 
AiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управленияAiCare - самоорганизующийся сервис управления
AiCare - самоорганизующийся сервис управления
 

More from WDDay

РОМАН САВІЦЬКИЙ «Web Accesability» Online WDDay 2022 js
РОМАН САВІЦЬКИЙ «Web Accesability» Online WDDay 2022 jsРОМАН САВІЦЬКИЙ «Web Accesability» Online WDDay 2022 js
РОМАН САВІЦЬКИЙ «Web Accesability» Online WDDay 2022 jsWDDay
 
АНДРІЙ ШУМАДА «To Cover Uncoverable» Online WDDay 2022 js
АНДРІЙ ШУМАДА «To Cover Uncoverable» Online WDDay 2022 jsАНДРІЙ ШУМАДА «To Cover Uncoverable» Online WDDay 2022 js
АНДРІЙ ШУМАДА «To Cover Uncoverable» Online WDDay 2022 jsWDDay
 
НАЗАРІЙ РОМАНКІВ «Top three questions that people fail in interviews about No...
НАЗАРІЙ РОМАНКІВ «Top three questions that people fail in interviews about No...НАЗАРІЙ РОМАНКІВ «Top three questions that people fail in interviews about No...
НАЗАРІЙ РОМАНКІВ «Top three questions that people fail in interviews about No...WDDay
 
МАКСИМ МОСТОВИЙ «Візуалізація даних на фронт енді» Online WDDay 2022 js
МАКСИМ МОСТОВИЙ «Візуалізація даних на фронт енді» Online WDDay 2022 jsМАКСИМ МОСТОВИЙ «Візуалізація даних на фронт енді» Online WDDay 2022 js
МАКСИМ МОСТОВИЙ «Візуалізація даних на фронт енді» Online WDDay 2022 jsWDDay
 
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...WDDay
 
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021WDDay
 
РОМАН САВІЦЬКИЙ «Core Web Vitals» Online WDDay 2021
РОМАН САВІЦЬКИЙ «Core Web Vitals»  Online WDDay 2021РОМАН САВІЦЬКИЙ «Core Web Vitals»  Online WDDay 2021
РОМАН САВІЦЬКИЙ «Core Web Vitals» Online WDDay 2021WDDay
 
ВЛАДИСЛАВ ЄРМОЛАЄВ «Чому варто використовувати CSS Grid Layout на реальних пр...
ВЛАДИСЛАВ ЄРМОЛАЄВ «Чому варто використовувати CSS Grid Layout на реальних пр...ВЛАДИСЛАВ ЄРМОЛАЄВ «Чому варто використовувати CSS Grid Layout на реальних пр...
ВЛАДИСЛАВ ЄРМОЛАЄВ «Чому варто використовувати CSS Grid Layout на реальних пр...WDDay
 

More from WDDay (8)

РОМАН САВІЦЬКИЙ «Web Accesability» Online WDDay 2022 js
РОМАН САВІЦЬКИЙ «Web Accesability» Online WDDay 2022 jsРОМАН САВІЦЬКИЙ «Web Accesability» Online WDDay 2022 js
РОМАН САВІЦЬКИЙ «Web Accesability» Online WDDay 2022 js
 
АНДРІЙ ШУМАДА «To Cover Uncoverable» Online WDDay 2022 js
АНДРІЙ ШУМАДА «To Cover Uncoverable» Online WDDay 2022 jsАНДРІЙ ШУМАДА «To Cover Uncoverable» Online WDDay 2022 js
АНДРІЙ ШУМАДА «To Cover Uncoverable» Online WDDay 2022 js
 
НАЗАРІЙ РОМАНКІВ «Top three questions that people fail in interviews about No...
НАЗАРІЙ РОМАНКІВ «Top three questions that people fail in interviews about No...НАЗАРІЙ РОМАНКІВ «Top three questions that people fail in interviews about No...
НАЗАРІЙ РОМАНКІВ «Top three questions that people fail in interviews about No...
 
МАКСИМ МОСТОВИЙ «Візуалізація даних на фронт енді» Online WDDay 2022 js
МАКСИМ МОСТОВИЙ «Візуалізація даних на фронт енді» Online WDDay 2022 jsМАКСИМ МОСТОВИЙ «Візуалізація даних на фронт енді» Online WDDay 2022 js
МАКСИМ МОСТОВИЙ «Візуалізація даних на фронт енді» Online WDDay 2022 js
 
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
 
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
ОЛЕКСАНДР ЛИПКО «Graceful Shutdown Node.js + k8s» Online WDDay 2021
 
РОМАН САВІЦЬКИЙ «Core Web Vitals» Online WDDay 2021
РОМАН САВІЦЬКИЙ «Core Web Vitals»  Online WDDay 2021РОМАН САВІЦЬКИЙ «Core Web Vitals»  Online WDDay 2021
РОМАН САВІЦЬКИЙ «Core Web Vitals» Online WDDay 2021
 
ВЛАДИСЛАВ ЄРМОЛАЄВ «Чому варто використовувати CSS Grid Layout на реальних пр...
ВЛАДИСЛАВ ЄРМОЛАЄВ «Чому варто використовувати CSS Grid Layout на реальних пр...ВЛАДИСЛАВ ЄРМОЛАЄВ «Чому варто використовувати CSS Grid Layout на реальних пр...
ВЛАДИСЛАВ ЄРМОЛАЄВ «Чому варто використовувати 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; поддержка...
  • 4. С помощью чего пишутся серьезные веб приложения?
  • 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