Tags
4-plus-1-model¶
API¶
- Применение паттерна проектирования MVC к веб-API
- Использование общепринятых соглашений с атрибутом [ApiController]
- Создание веб-API для мобильных и клиентских приложений с помощью MVC
- Создание первого проекта веб-API
- Генерация ответа от модели
- Определение API сервисов
- Архитектура API-шлюза
- Трудности проектирования API-шлюза
- Реализация API-шлюза
- Модель владения в API-шлюзе
- Шаблон “API-шлюз”
- Шаблоны внешних API
- Проблемы с проектированием внешних API
Azure¶
- Добавляем зависимости Azure SignalR Services
- Представляем Azure SignalR Service
- Обзор Azure SignalR Service REST API
CORS¶
CSRF¶
DDD¶
DDD/aggregate¶
- Шаблон “Агрегат” из DDD
- Проектирование доменной модели с помощью шаблона “Агрегат” из DDD
- Доменные события
- Методы агрегата полностью полагаются на события
- События представляют изменения состояния
- Развитие доменных событий
- Сохранение агрегатов с помощью порождения событий
DDD/domain-event¶
DNS¶
Elasticsearch¶
Elasticsearch/aggs¶
- Bucket aggregations
- bucket_sort agg
- Агрегации в Elasticsearch
- Filter Aggregation
- Missing aggregation
- Nested aggregation
- Конвеерные агрегации (pipeline aggs)
- Range aggregation
- Terms Aggregation
Elasticsearch/analyze¶
Elasticsearch/compound¶
Elasticsearch/configuration¶
Elasticsearch/full-text¶
Elasticsearch/joining¶
Elasticsearch/mapping¶
Elasticsearch/query¶
- Bool query
- Compound queries
- Exists query
- Full-text queries
- IDs query
- inner_hits parameter
- Joining queries
- Match query
- Nested query
- Query DSL
- Range query
- Term-level queries
- Term query
Elasticsearch/term-level¶
GUI¶
HTTP¶
- Polly
- HTTP
- Как работает ASP.NET Core?
- Обработка HTTP-методов с помощью маршрутизации на основе атрибутов
HTTP-2¶
- HTTP/2
- Запросы и ответы gRPC на основе HTTP/2
- Введение в протокол HTTP/2
- Увеличиваем максимальное число соединений HTTP/2
- Держим соединения HTTP/2 открытыми
HTTPS¶
- Добавляем протокол HTTPS в приложение
- Настройка Kestrel для использования сертификатов HTTPS в промышленном окружении
- Делаем так, чтобы протокол HTTPS использовался для всего приложения
- Терминирование SSL/TLS, пересылка заголовков и обнаружение защищённых запросов
- Использование HTTPS-сертификатов для разработки
IIS¶
- Конфигурирование IIS для ASP.NET Core
- Подготовка и публикация приложения в IIS
- Публикация приложения в IIS
Java¶
JavaScript¶
- JavaScript библиотеки для gRPC-web
- Добавляем зависимости
- Добавляем клиентскую логику
- Настраиваем клиент для JavaScript
- Настраиваем клиент JavaScript
- Плюсы и минусы протокола MessagePack
Kafka¶
- Меняем настройки для конкретного топика
- Как управлять оффсетом топика
- Обёртка над консольными командами Kafka
Linux¶
- Обёртка над консольными командами Kafka
- Установка Docker на Ubuntu 20.04
- Чиним сеть в WSL Ubuntu 20.04
- Размещение приложения в Linux
- Подготовка приложения к развертыванию в Linux
- Запуск приложения ASP.NET Core за обратным прокси-сервером в Linux
Linux/Mint¶
Linux/PulseAudio¶
Linux/console¶
Linux/grub¶
Linux/ssh¶
Linux/systemd¶
MessagePack¶
NAS/Synology¶
NET¶
- Быстрый старт с библиотекой CommandLineParser
- Безопасное завершение работы консольного приложения
- Выполнение кода перед Main
- Создание объектов без вызова конструктора
- Добро пожаловать в современный .NET
- POCO — Plain Old CLR Object
NET/ASPNETCore¶
- Список всех маршрутов в ASP.NET Core
- Объект HttpContext
- Книжка “ASP.NET Core в действии”
- Начало работы с ASP.NET Core
- Как работает ASP.NET Core?
- Введение в ASP.NET Core
- Когда следует отдать предпочтение ASP.NET Core
- Создание вашего первого приложения ASP.NET Core
- Файл проекта .csproj: определение зависимостей
- Класс Program: сборка веб-хоста
- Разбираемся с макетом проекта
- Запуск веб-приложения
- Класс Startup: настройка вашего приложения
- Ваше первое приложение
- Возврат ответа с помощью ActionResults
- Приём параметров в обработчиках страниц
- Добавление сервисов фреймворка ASP.NET Core в контейнер
- Внедрение зависимостей в ASP.NET Core
- Жизненный цикл: когда создаются зависимости?
- Внедрение сервисов в методы действий, обработчики страниц и представления
- Введение во внедрение зависимостей
- Регистрация сервисов с использованием объектов и лямбда-функций
- Регистрация собственных сервисов в контейнере
- Многократная регистрация сервиса в контейнере
- Конфигурация сервисов с помощью внедрения зависимостей
- Использование контейнера внедрения зависимостей
- Конфигурирование приложения с помощью метода CreateDefaultBuilder
- Сохраняем данные с Entity Framework Core
- Аутентификация для API и распределенных приложений
- Аутентификация в ASP.NET Core: сервисы и промежуточное ПО
- Пользователи и утверждения в ASP.NET Core
- Авторизация в ASP.NET Core
- Авторизация: обеспечиваем защиту приложения
- Создание политики со специальным требованием и обработчиком
- Требования и обработчики: строительные блоки политики
- Использование политик для авторизации на основе утверждений
- Создание специальных компонентов
- Принципал
- Сервис (Service)
- Политика
- Утверждение (claim)
- Модель предметной области
- Многостраничный веб-сайт
- Шаблон проекта
- Книжка “Начала использования gRPC с ASP.NET Core 6”
- Основы ASP.NET Core
- Введение в ASP.NET Core 6
- Создание приложения ASP.NET Core с gRPC
- Пишем, конфигурируем и доставляем сервисы gRPC
- Предоставляем версии файлов Protobuf при помощи ASP.NET Core Minimal API
- gRPC-web и ASP.NET Core 6
- Размещаем приложение Blazor внутри приложения ASP.NET Core
NET/ASPNETCore/HTTPS¶
- Добавляем протокол HTTPS в приложение
- Настройка Kestrel для использования сертификатов HTTPS в промышленном окружении
- Делаем так, чтобы протокол HTTPS использовался для всего приложения
- Терминирование SSL/TLS, пересылка заголовков и обнаружение защищённых запросов
- Использование HTTPS-сертификатов для разработки
NET/ASPNETCore/Identity¶
- Добавляем ASP.NET Core Identity в существующий проект
- Модель данных ASP.NET Core Identity
- Аутентификация: добавляем пользователей в приложение с помощью ASP.NET Core Identity
- Настройка сервисов ASP.NET Core Identity и промежуточного ПО
- Создание проекта из шаблона
- Создание проекта, в котором используется ASP.NET Core Identity
- Настройка страницы в пользовательском интерфейсе ASP.NET Core Identity по умолчанию
- Изучение шаблона в обозревателе решений
- Взаимодействие с ASP.NET Core Identity
- Управление пользователями: добавление специальных данных для пользователей
- Обновление модели данных EF Core для поддержки Identity
- Обновление представлений Razor для связи с пользовательским интерфейсом Identity
- Что такое ASP.NET Core Identity?
NET/ASPNETCore/binding-model¶
- Привязка сложных типов
- Модель привязки: получение и проверка пользовательского ввода
- Связывание простых типов
- Выбор источника привязки
- От запроса к модели: делаем запрос полезным
- Модели в Razor Pages и MVC
- Организация моделей привязки в Razor Pages
- Модель привязки
- Привязка модели
- Значение маршрута
NET/ASPNETCore/endpoint¶
- Создание веб-сайта с помощью страниц Razor
- Маршрутизация в ASP.NET Core
- Применение авторизации к конечным точкам
- Создание специального компонента маршрутизации конечных точек
- Создание специальных конечных точек с помощью маршрутизации конечных точек
- Создание простых конечных точек с помощью MapGet и WriteJsonAsync
- Настройка конвейера промежуточного ПО
- Создание простых конечных точек с помощью метода расширения Run
- Конечная точка
NET/ASPNETCore/filters¶
- Промежуточное ПО в качестве фильтра
- Фильтры действий: настройка привязки модели и результатов действий
- Добавляем фильтры к действиям, контроллерам, страницам Razor Pages и глобально
- Фильтры авторизации: защита API
- Создание простого фильтра
- Создание фильтров для приложения
- Использование внедрения зависимостей с атрибутами фильтра
- Фильтры исключений: собственная обработка исключений для методов действий
- Фильтры или промежуточное ПО: что выбрать?
- Конвейер фильтров MVC и Razor Pages
- Конвейер фильтров MVC
- Фильтры страниц: настройка привязки модели для Razor Pages
- Прерывание выполнения конвейера
- Конвейер фильтров Razor Pages
- Фильтры ресурсов: прерывание выполнения методов действий
- Фильтры результатов: настройка результатов действий перед их выполнением
- Что такое фильтры и когда их использовать
- Порядок выполнения фильтров
- Область действия фильтра
NET/ASPNETCore/middleware¶
- Промежуточное ПО в качестве фильтра
- Объединение компонентов в конвейер
- Обработка ошибок с помощью промежуточного ПО
- Обработка запросов с помощью конвейера промежуточного ПО
- Что такое промежуточное ПО?
- Фильтры или промежуточное ПО: что выбрать?
- Добавление в конвейер с помощью метода Use
- Ветвление конвейера с помощью метода расширения Map
- Создание специального компонента промежуточного ПО
- Настройка конвейера промежуточного ПО
NET/ASPNETCore/publish¶
- Модель хостинга ASP.NET Core
- Конфигурирование IIS для ASP.NET Core
- Настройка URL-адресов приложения
- Размещение приложения в Linux
- Оптимизация клиентских ресурсов с помощью BundlerMinifier
- Подготовка и публикация приложения в IIS
- Подготовка приложения к развертыванию в Linux
- Публикация и развертывание приложения
- Публикация приложения в IIS
- Запуск приложения ASP.NET Core за обратным прокси-сервером в Linux
- Запуск и публикация приложения ASP.NET Core
NET/ASPNETCore/routing¶
- Получение значений маршрута из HttpContext
- Применение паттерна MVC к Razor Pages
- Маршрутизация на основе соглашений и маршрутизация на основе атрибутов
- Настройка соглашений с помощью Razor Pages
- Настройка шаблонов маршрутов для страницы Razor
- Генерация URL-адресов из параметров маршрута
- Сопоставление URL-адресов с Razor Pages с использованием маршрутизации
- Изучение синтаксиса шаблона маршрута
- Маршрутизация в ASP.NET Core
- Маршрутизация и страницы Razor
- Выбор обработчика страницы для вызова
- Связывание простых типов
- Маршрутизация на основе атрибутов: Связывание методов действий с URL-адресами
- Сочетание атрибутов маршрута, чтобы шаблоны маршрутов следовали принципу DRY
- Обработка HTTP-методов с помощью маршрутизации на основе атрибутов
- Использование замены маркера для уменьшения дублирования при маршрутизации на основе атрибутов
- Шаблон маршрута
- Значение маршрута
- Маршрутизация
- Сегмент URL-адреса
NET/ASPNETCore/security¶
- Изучение других векторов атак
- Повышаем безопасность приложения
- Предотвращение небезопасных прямых ссылок на объекты
- Обнаружение и предотвращение атак с открытым перенаправлением (open redirect attacks)
- Защита паролей и данных пользователей
NET/ASPNETCore/testing¶
- Тестирование в ASP.NET Core
- Создание TestServer с помощью пакета TestHost
- Интеграционное тестирование: тестирование всего приложения в памяти
- Изоляция базы данных с помощью поставщика EF Core в памяти
- Уменьшение дублирования кода за счёт создания специального класса WebApplicationFactory
- Замена зависимостей в классе WebApplicationFactory
- Тестирование приложения с помощью класса WebApplicationFactory
- Тестирование приложения
- Модульное тестирование API-контроллеров
- Модульное тестирование специального промежуточного ПО
- Модульное тестирование с xUnit
NET/ASPNETCore/validation¶
- FluentValidation
- Обработка пользовательского ввода с помощью валидации модели
- Использование атрибутов DataAnnotations для валидации
- Валидация модели на сервере в целях безопасности
- Тег-хелперы сообщений валидации и сводки сообщений
- Добавляем FluentValidation в приложение
- Создание специального атрибута валидации
- Сравнение FluentValidation и атрибутов DataAnnotations
- Замена фреймворка валидации на FluentValidation
NET/Blazor¶
NET/BlazorWasm¶
- ASP.NET Core Blazor
- Размещаем приложение Blazor внутри приложения ASP.NET Core
- Настроим компоненты SignalR
- Настраиваем клиент для Blazor WebAssembly
NET/CancellationToken¶
NET/CancellationTokenSource¶
NET/ContinueWith¶
NET/Core¶
NET/Culture¶
NET/DI¶
- Как зарегистрировать одну реализацию с несколькими интерфейсами
- Добавление сервисов фреймворка ASP.NET Core в контейнер
- Создание слабосвязанного кода
- Внедрение зависимостей в ASP.NET Core
- Жизненный цикл: когда создаются зависимости?
- Внедрение сервисов в методы действий, обработчики страниц и представления
- Введение во внедрение зависимостей
- Регистрация сервисов с использованием объектов и лямбда-функций
- Регистрация собственных сервисов в контейнере
- Многократная регистрация сервиса в контейнере
- Конфигурация сервисов с помощью внедрения зависимостей
- Преимущества внедрения зависимостей
- Использование контейнера внедрения зависимостей
- Граф зависимостей
- Контейнер внедрения зависимостей
NET/DataAnnotations¶
NET/EFCore¶
- Добавляем EF Core в приложение
- Создание модели данных
- Выбор провайдера базы данных и установка EF Core
- Создание записи
- Знакомство с Entity Framework Core
- Загрузка списка записей
- Загрузка одной записи
- Выполнение запроса к базе данных и сохранение в ней данных
- Регистрация контекста данных
- Пример приложения для 12 и последующих глав
- Сохраняем данные с Entity Framework Core
- Обновление модели
- Использование EF Core в промышленных приложениях
- Настраиваем SQL Server и используем EF Core для доступа к данным
- Сущность
NET/EFCore/migrations¶
NET/EFCore/testing¶
NET/Enum¶
NET/HttpClient¶
- Вызов API для протокола HTTP: проблема с классом HttpClient
- Вызов удаленных API с помощью IHttpClientLibrary
- Настройка именованных клиентов во время регистрации
- Создание специального обработчика HttpMessageHandler
- Создание экземпляров класса HttpClient с помощью интерфейса IHttpClientFactory
- Обработка временных ошибок HTTP с помощью библиотеки Polly
- Использование IHttpClientFactory для управления жизненным циклом HttpClientHandler
- Использование типизированных клиентов для инкапсуляции HTTP-вызовов
NET/IDisposable¶
NET/MVC¶
- Применение паттерна MVC к Razor Pages
- Сравнение Razor Pages и MVC в ASP.NET Core
- Паттерн проектирования MVC
- Маршрутизация на основе соглашений и маршрутизация на основе атрибутов
- Генерация URL-адресов из параметров маршрута
- Выбор представления из контроллера MVC
- Применение паттерна проектирования MVC к веб-API
- Маршрутизация на основе атрибутов: Связывание методов действий с URL-адресами
- Сочетание атрибутов маршрута, чтобы шаблоны маршрутов следовали принципу DRY
- Использование общепринятых соглашений с атрибутом [ApiController]
- Создание веб-API для мобильных и клиентских приложений с помощью MVC
- Создание первого проекта веб-API
- Генерация ответа от модели
- Обработка HTTP-методов с помощью маршрутизации на основе атрибутов
- Использование замены маркера для уменьшения дублирования при маршрутизации на основе атрибутов
- Внедрение сервисов в методы действий, обработчики страниц и представления
- Фильтры действий: настройка привязки модели и результатов действий
- Добавляем фильтры к действиям, контроллерам, страницам Razor Pages и глобально
- Конвейер фильтров MVC
- Вызов веб-API из других доменов с помощью CORS
- Создание специальных компонентов MVC и Razor Pages
- Метод действия
- Модель представления
NET/NET5¶
NET/NET6¶
- Даты и время в .NET 6
- Тип DateOnly
- Сериализация Json с помощью Source Generators
- Однофайловые приложения в .NET 6
- Тип TimeOnly
- Классические шаблоны для NET6
- FastEndpoints
- Введение в C# 10
- Используем сервисы gRPC в NET 6
NET/NewtonsoftJson¶
NET/Razor¶
- RazorLight
- Создание ответов при помощи Razor Pages
- Применение паттерна MVC к Razor Pages
- Сравнение Razor Pages и MVC в ASP.NET Core
- Добавление Razor Pages в приложение
- Введение в Razor Pages
- Razor Pages и обработчики страниц
- Изучение типичной страницы Razor
- Маршрутизация на основе соглашений и маршрутизация на основе атрибутов
- Настройка соглашений с помощью Razor Pages
- Настройка шаблонов маршрутов для страницы Razor
- Генерация URL-адресов из параметров маршрута
- Сопоставление URL-адресов с Razor Pages с использованием маршрутизации
- Маршрутизация и страницы Razor
- Выбор обработчика страницы для вызова
- Создание динамических веб-страниц с помощью Razor
- Создание представлений Razor
- Макеты, частичные представления и _ViewStart
- Переопределение родительских макетов с помощью секций
- Визуализация HTML-кода с использованием представлений Razor
- Выполнение кода в каждом представлении с помощью _ViewStart и _ViewImports
- Выбор представления из контроллера MVC
- Использование макетов для общей разметки
- Использование частичных представлений для инкапсуляции разметки
- Представления: визуализация пользовательского интерфейса
- Внедрение сервисов в методы действий, обработчики страниц и представления
- Добавляем фильтры к действиям, контроллерам, страницам Razor Pages и глобально
- Фильтры страниц: настройка привязки модели для Razor Pages
- Конвейер фильтров Razor Pages
- Скрытие элементов в шаблонах Razor от незарегистрированных пользователей
- Защита от межсайтового скриптинга (XSS)
- Защита от межсайтовой подделки запросов (CSRF)
- Создание специальных компонентов MVC и Razor Pages
- Компоненты представления: добавление логики в частичные представления
- Обработчик страницы
- Директива
- Макет
- Загружаем файл с данными, отображаем и управляем данными при помощи Razor Pages
NET/Razor/tag-helper¶
- Создание ссылок с помощью тег-хелпера anchor
- Сброс кеша с помощью тег-хелпера добавления версии (Append Version Tag Helper)
- Создание форм с помощью тег-хелперов
- Редакторы кода и тег-хелперы
- Создание форм с помощью тег-хелперов
- Использование условной разметки с помощью тег-хелпера окружения
- Тег-хелпер формы
- Тег-хелперы input и textarea
- Тег-хелпер метки (label)
- Тег-хелпер раскрывающегося списка
- Тег-хелперы сообщений валидации и сводки сообщений
- Создание специального тег-хелпера Razor
- Создание специального тег-хелпера для условного скрытия элементов
- Создание тег-хелпера для преобразования Markdown в HTML
- Вывод информации об окружении с помощью специального тег-хелпера
NET/SignalR¶
- Используем Newtonsoft.Json в SignalR
- Книжка “SignalR на NET 6 - полное руководство”
- Введение в SingalR
- Делаем хаб типизированным
- Настраиваем хаб SignalR
- Подготовим проект
- Добавляем зависимости
- Добавляем клиентскую логику
- Браузерные клиенты SignalR
- Настроим компоненты SignalR
- Настраиваем клиент для Blazor WebAssembly
- Настраиваем клиент для JavaScript
- Внешние клиенты SignalR
- Настраиваем Java клиент
- Настраиваем .NET клиент
- Настраиваем чистый Websocket клиент
- Рассылка сообщений всем клиентам
- Отправка сообщений отдельным клиентам или группам клиентов
- Отправка сообщений конкретным клиентам
- Работа с группами клиентов
- Стриминг с клиента в SignalR
- Стриминг с сервера
- Стриминг в SignalR
- Для чего нужен стриминг?
- Продвинутая настройка SignalR
- Применяем расширенные настройки транспорта
- Настраиваем клиент Java
- Настраиваем клиент JavaScript
- Настраиваем клиент .NET
- Настраиваем клиент SignalR
- Настраиваем сервер SignalR
- Настройки протокола JSON
- Плюсы и минусы протокола MessagePack
- Настройка SignalR верхнего уровня
- Применяем аутентификацию в SignalR
- Применяем авторизацию в SignalR
- Аутентификация на клиентах
- Безопасность SignalR приложений
- Настраиваем аутентификацию на сервере
- Настраиваем IdentityServer 4
- Настраиваем поставщика единого входа
- Что такое CORS и почему он важен
- Используем множество реплик хаба с помощью объединительной панели Redis
- Масштабирование приложения SignalR
- Настраиваем объединительную панель Redis
- Используем HubContext для отправки сообщений извне хаба SignalR
- Добавляем зависимости Azure SignalR Services
- Представляем Azure SignalR Service
- Обзор Azure SignalR Service REST API
NET/TaskCompletionSource¶
NET/TaskFactory¶
NET/WebApi¶
- Привязка модели из нескольких источников в один класс в ASP.NET Core
- FastEndpoints
- Вызов веб-API из других доменов с помощью CORS
NET/antipatterns¶
NET/async¶
- async void
- await ContinueWith
- Подписки (subscriptions) в CancellationTokenSource
- Избегаем return await
- Task.Factory.StartNew
- TaskCompletionSource и продолжения в том же потоке.
- Ожидание асинхронного кода может привести к Threadpool starvation
NET/authentication¶
- Аутентификация для API и распределенных приложений
- Аутентификация в ASP.NET Core: сервисы и промежуточное ПО
- Применяем аутентификацию в SignalR
- Аутентификация на клиентах
- Настраиваем аутентификацию на сервере
NET/authorization¶
- Авторизация в ASP.NET Core
- Авторизация: обеспечиваем защиту приложения
- Создание политики со специальным требованием и обработчиком
- Создание специальных политик авторизации
- Создание обработчика AuthorizationHandler на основе ресурсов
- Обработка запросов, не прошедших аутентификацию
- Скрытие элементов в шаблонах Razor от незарегистрированных пользователей
- Ручная авторизация запросов с помощью интерфейса IAuthorizationService
- Предотвращение доступа анонимных пользователей к вашему приложению
- Управление доступом с авторизацией на основе ресурсов
- Требования и обработчики: строительные блоки политики
- Использование политик для авторизации на основе утверждений
- Применение авторизации к конечным точкам
- Политика
- Применяем авторизацию в SignalR
NET/background-task¶
- Quartz.NET
- Создание фоновых задач и сервисов
- Запуск фоновых задач по таймеру
- Запуск фоновых задач с помощью интерфейса IHostedService
- Использование сервисов с жизненным циклом Scope в фоновых задачах
- Создадим фоновую задачу для обработки загруженного файла и канал для хранения данных
NET/boxing¶
NET/configuration¶
- Добавление поставщика конфигурации в файле Program.cs
- Связывание строго типизированных настроек без интерфейса IOptions
- Создание объекта конфигурации для вашего приложения
- Конфигурирование приложения ASP.NET Core
- Настройка приложения для нескольких окружений
- Конфигурирование приложения с помощью метода CreateDefaultBuilder
- Разработка классов параметров для автоматической привязки
- Определение окружения размещения
- Знакомство с интефейсом IOptions
- Загрузка файлов конфигурации для конкретного окружения
- Перезагрузка значений конфигурации при их изменении
- Перезагрузка строго типизированных параметров с помощью IOptionsSnapshot
- Задаем окружение размещения
- Безопасное хранение секретов конфигурации
- Использование нескольких поставщиков для переопределения значений конфигурации
- Использование строго типизированных настроек с паттерном Options
- Работа с требованиями к сложной конфигурации
- Частичное создание конфигурации для настройки дополнительных поставщиков
- Использование сервисов для настройки IOptions с помощью IConfigurationOptions
- Поставщик конфигурации
- Секрет
- Настройка
NET/dotnet¶
- Однофайловые приложения в .NET 6
- Классические шаблоны для NET6
- Инструмент сценариев dotnet-script
- Project templates
- Создание вашего первого приложения ASP.NET Core
- Добавление Razor Pages в приложение
NET/encoding¶
NET/environment¶
- Настройка приложения для нескольких окружений
- Определение окружения размещения
- Загрузка файлов конфигурации для конкретного окружения
- Задаем окружение размещения
NET/generics¶
NET/json¶
NET/lambda¶
NET/library¶
- CommandLineParser
- ConsoleAppFramework
- DnsClient.NET
- Генерация случайных данных
- FastEndpoints
- FluentValidation
- gui.cs
- JustMock Lite
- konsole
- LibreHardwareMonitorLib
- Lunr-core
- Markdig
- Polly
- PolySharp
- QrCodeGenerator
- Quartz.NET
- RazorLight
- Recyclable Memory Stream
- Serilog
- Spectre.Console
- System.CommandLine
- System.IO.Abstractions
- WireMock.NET
- YARP: Yet Another Reverse Proxy
NET/logging¶
- Serilog
- Seq
- Добавление нового поставщика журналирования в приложение
- Добавление поставщика структурного журналирования в приложение
- Добавление сообщений журнала в приложение
- Категория сообщения: какой компонент создал журнал
- Изменение избыточности сообщений журналов с помощью фильтрации
- Контроль места записи журналов с помощью поставщиков журналирования
- Форматирование сообщений и сбор значений параметров
- Уровень сообщения журнала: насколько важно сообщение?
- Мониторинг и устранение ошибок с помощью журналирования
- Замена ILoggerFactory по умолчанию на Serilog
- Структурное журналирование: создание полезных сообщений журналов с возможностью поиска
- Эффективное использование журналирования в промышленном приложении
- Использование областей журналирования для добавления дополнительных свойств в сообщения журнала
- Структурное журналирование
NET/memory-leak¶
NET/multithreading¶
- TaskCompletionSource и продолжения в том же потоке.
- Interlocked
- lock (Monitor.Enter / Monitor.Exit)
- Monitor.Wait / Monitor.Pulse / Monitor.PulseAll
- SemaphoreSlim
- System.Threading.Channels.Chanhel
- Создадим фоновую задачу для обработки загруженного файла и канал для хранения данных
NET/old-versions¶
NET/performance¶
NET/serialization¶
NET/struct¶
NET/template¶
NET/templates¶
- Классические шаблоны для NET6
- Project templates
- Создание вашего первого приложения ASP.NET Core
- Шаблон проекта
- Настраиваем IdentityServer 4
NET/testing¶
NET/threadpool¶
NET/websocket¶
NET/worker-service¶
- Создание фоновых задач и сервисов
- Настройка запуска задания по расписанию с помощью Quartz.NET
- Координация фоновых задач с помощью Quartz.NET
- Создание сервисов рабочей роли без пользовательского интерфейса с использованием IHost
- Создание сервиса рабочей роли из шаблона
- Установка Quartz.NET в приложение ASP.NET Core
- Запуск сервисов рабочей роли в промышленном окружении
- Использование кластеризации для добавления избыточности в фоновые задачи
NET/память¶
OOP/pattern¶
- Шаблон “Внедрение зависимостей”
- Шаблон “Хранитель”
- Шаблон “Предохранитель”
- Шаблон “Повтор”
- Шаблон “Model-View-Controller”
- Шаблон “Request-Endpoint-Response”
OOP/principles¶
- Принцип согласованного изменения (Common Closure Principle, CCP)
- Принцип открытости-закрытости (Open-Closed principle)
- Принципы пакетов
- Принцип единой ответственности (Single Responsibility Principle, SRP)
- S.O.L.I.D
Obsidian¶
Obsidian/plugin¶
QRcode¶
REST¶
- Модель зрелости REST
- Трудности с привязкой операций к HTTP-командам
- Трудности извлечения нескольких ресурсов за один запрос
- REST — REpresentational State Transfer
- Преимущества, недостатки и типовое использование
- Разбираемся со спецификацией gRPC
- gRPC-web в сравнении с REST API
Redis¶
- Используем множество реплик хаба с помощью объединительной панели Redis
- Настраиваем объединительную панель Redis
SOA¶
SOAP¶
SQL/injection¶
SSO¶
URL¶
- Генерация URL-адресов из параметров маршрута
- Изучение синтаксиса шаблона маршрута
- Сегмент URL-адреса
- Имя хоста, домен
- Путь
- Строка запроса
WSL¶
Web/pattern¶
Windows/service¶
XSS¶
architecture¶
- Шаблоны архитектуры приложения
- Шаблон “Микросервисная архитектура”
- Шаблон “Монолитная архитектура”
- Модель представлений архитектуры вида 4+1
- Гексагональная архитектура
- Определение микросервисной архитектуры приложения
- Многоуровневая архитектура
- Определение системных операций
- Что представляет собой микросервисная архитектура
biometry¶
business-logic¶
business-logic/pattern¶
business-logic/patterns¶
console¶
- Меняем настройки для конкретного топика
- Как управлять оффсетом топика
- Обёртка над консольными командами Kafka
console-app¶
- Безопасное завершение работы консольного приложения
- CommandLineParser
- ConsoleAppFramework
- gui.cs
- konsole
- Spectre.Console
- System.CommandLine
data-structure¶
definition¶
- Метод действия
- Принципал
- Сервис (Service)
- Политика
- Модель привязки
- Утверждение (claim)
- Поставщик конфигурации
- Межсайтовая подделка запроса (CSRF)
- Граф зависимостей
- Контейнер внедрения зависимостей
- Модель предметной области
- Конечная точка
- Область действия фильтра
- Минификация
- Привязка модели
- Многостраничный веб-сайт
- Обработчик страницы
- Конвейер
- Шаблон проекта
- Директива
- Шаблон маршрута
- Значение маршрута
- Маршрутизация
- Схема
- Секрет
- Сегмент URL-адреса
- Настройка
- Структурное журналирование
- Имя хоста, домен
- Путь
- Строка запроса
- Модель представления
- API — Application Programming Interface
- Аутентификация
- Авторизация
- Cohesion
- Coupling
- DTO — Data Transfer Object
- Сущность
- Связный список
- Оптимистическая блокировка
- Пессимистическая блокировка
- POCO — Plain Old CLR Object
docker¶
- Docker без sudo
- Установка Docker на Ubuntu 20.04
- Docker без sudo на Synology NAS
- Запуск приложения ASP.NET Core за обратным прокси-сервером в Linux
event-sourcing¶
- Шаблон “Порождение событий”
- Методы агрегата полностью полагаются на события
- События представляют изменения состояния
- Развитие доменных событий
- Реализация повествований на основе хореографии с помощью порождения событий
- Порождение и публикация событий
- Совместное использование повествований и порождения событий
- Преимущества порождения событий
- Разработка бизнес-логики с порождением событий
- Недостатки порождения событий
- Обзор порождения событий
- Реализация хранилища событий
- Идемпотентная обработка сообщений
- Создание оркестратора повествования
- Реализация оркестраторов повествований с помощью порождения событий
- Реализация участника повествования
- Сохранение агрегатов с помощью порождения событий
- Улучшение производительности с помощью снимков
firmware¶
fulltext-search¶
gRPC¶
- gRPC
- Книжка “Начала использования gRPC с ASP.NET Core 6”
- Преимущества, недостатки и типовое использование
- gRPC — Общие понятия
- Запросы и ответы gRPC на основе HTTP/2
- gRPC-статус
- Трейлеры
- Разбираемся со спецификацией gRPC
- Создаём приложение с gRPC из шаблона
- Создание приложения ASP.NET Core с gRPC
- Опция IgnoreUnknownServices
- Обрабатываем ошибки, управляем ответами и логированием
- Версионируем сервисы gRPC
- Создание клиента gRPC
- Увеличиваем максимальное число соединений HTTP/2
- Оптимизируем производительность
- Загружаем и отображаем данные с помощью страниц Razor, фоновых задач и gRPC
- Пишем сервис gRPC
gRPC/channel¶
- Канал gRPC
- Используем сервисы gRPC в NET 6
- Задаём ограничение размера сообщения
- Держим соединения HTTP/2 открытыми
gRPC/client¶
- Создадим и сконфигурируем клиент gRPC при помощи IHttpClientFactory, а также зарегистрируем все зависимости в файле Program.cs
- Реализуем слой доступа к данным при помощи клиента gRPC
- Используем клиент на C# с JWT
gRPC/client-streaming¶
gRPC/compression¶
- Добавим провайдер сжатия
- Используем преимущество сжатия
- Создадим и сконфигурируем клиент gRPC при помощи IHttpClientFactory, а также зарегистрируем все зависимости в файле Program.cs
gRPC/deadline¶
gRPC/duplex-streaming¶
- Двунаправленный поток
- Типы сервисов gRPC
- Пишем, конфигурируем и доставляем сервисы gRPC
- Двунаправленный поток
gRPC/gRPC-web¶
- gRPC-web в сравнении с REST API
- История и обзор gRPC-web
- JavaScript библиотеки для gRPC-web
- Обзор gRPC-web
- Делаем gRPC-web сервис из gRPC сервиса
- gRPC-web и клиенты .NET
- gRPC-web и клиенты ASP.NET Core 3+
- gRPC-web и ASP.NET Core 6
- Переделываем gRPC сервис CountryService для браузерных приложений
- gRPC-web и экосистема .NET
- Генерируем заглушки TypeScript с помощью Protoc
- Импортируем и показываем данные с помощью Angular 12 и gRPC-web
- Управляем данными при помощи TypeScript и gRPC-web
- Загружаем файл с данными при помощи TypeScript, Web Worker и gRPC-web
- Доступ к данным с помощью клиента gRPC-web от Improbable
- Используем клиент gRPC-web с JWT
gRPC/gRPCui¶
gRPC/gRPCurl¶
gRPC/interceptors¶
- Перехватчики
- Перехватчики
- Создадим и сконфигурируем клиент gRPC при помощи IHttpClientFactory, а также зарегистрируем все зависимости в файле Program.cs
gRPC/protobuf¶
- Protocol Buffers
- Protobufs
- Создаём и компилируем файлы Protobuf
- Предоставляем версии файлов Protobuf при помощи ASP.NET Core Minimal API
- Компилируем файлы Protobuf и генерируем клиенты
- Генерируем заглушки TypeScript с помощью Protoc
gRPC/protobuf/declarations¶
gRPC/protobuf/messages¶
- Пустые сообщения
- Bytes
- Коллекции
- Комментарии
- Декларации сообщений
- Перечисления (Enum)
- One of
- Скалярные типы
- Известные типы (Well-Known Types)
gRPC/protobuf/services¶
gRPC/server-streaming¶
gRPC/testing¶
gRPC/unary¶
gRPC/validation¶
github¶
grpc/server-streaming¶
hardware¶
hexagon¶
internet/service¶
lock¶
markdown¶
message-broker¶
- Конкурирующие получатели и порядок следования сообщений
- Использование брокера сообщений
- Добавление и обновление CQRS-представлений
microservice¶
- Куб масштабирования
- Книжка “Микросервисы. Шаблоны разработки и рефакторинга”
- Сравнение SOA и микросервисов
- Побег из монолитного ада
- Что представляет собой микросервисная архитектура
- Аутентификация и авторизация
- Обеспечение согласованности данных между сервисом и монолитом
- Проектирование интеграционного слоя
- Проектирование взаимодействия между сервисом и монолитом
microservice/anti-pattern¶
microservice/api¶
- Шаблон “API-шлюз”
- Шаблон “Бэкенды для фронтендов” (BFF)
- Шаблон “API-шлюз”
- Шаблоны внешних API
- Проблемы с проектированием внешних API
microservice/api-composition¶
microservice/architecture¶
microservice/availability¶
microservice/chassis¶
microservice/communication¶
- Шаблон “API-шлюз”
- Шаблон “Бэкенды для фронтендов” (BFF)
- Шаблон “Предохранитель”
- Шаблон “Обнаружение на клиентской стороне”
- Шаблоны взаимодействия
- Шаблон “Идемпотентный потребитель”
- Шаблон “Обмен сообщениями”
- Шаблон “Опрашивающий издатель”
- Шаблон “Повтор”
- Шаблон “Удаленный вызов процедур”
- Шаблон “Саморегистрация”
- Шаблон “Обнаружение на стороне сервера”
- Шаблон “Реестр сервисов”
- Шаблон “Сторонняя регистрация”
- Шаблон “Отслеживание транзакционного журнала”
- Шаблон “публикация событий” или Outbox
- Шаблон “Сеть сервисов”
- Канал сообщений
- Cообщение
- Стиль “Уведомления”
- Канал “Точка-точка”
- Стиль “Публикация-асинхронный ответ”
- Канал “издатель-подписчик”
- Стиль “публикация-подписка”
- Стиль “Запрос-асинхронный ответ”
- Стиль “Запрос-ответ”
- Использование асинхронного обмена сообщениями для улучшения доступности
- Взаимодействие с помощью асинхронного обмена сообщениями
- Межпроцессное взаимодействие в микросервисной архитектуре
- Обзор IPC
- Реализация стилей взаимодействия
- Взаимодействие на основе удаленного вызова процедур (RPI)
- Обнаружение сервисов
- Транзакционный обмен сообщениями
microservice/concurrency¶
microservice/configuration¶
microservice/cqrs¶
- Шаблон “Разделение ответственности команд и запросов”(CQRS)
- Достоинства CQRS
- Выбор хранилища данных
- Недостатки CQRS
- Применение шаблона CQRS
- Добавление и обновление CQRS-представлений
- Проектирование CQRS-представлений
- Структура модуля доступа к данным
microservice/data-management¶
- Шаблон “Агрегат” из DDD
- Шаблоны согласованности данных
- Шаблон “Своя БД у сервиса”
- Шаблон “Доменное событие” из DDD
- Шаблон “Порождение событий”
- Шаблон “Одна БД для сервисов”
- Проблемы традиционного сохранения данных.
- Структура модуля доступа к данным
microservice/decomposition¶
- Шаблон “Разбиение по бизнес-возможностям”
- Шаблон “декомпозиция по поддомену”
- Шаблоны для разбиения приложения на микросервисы
- Стратегии декомпозиции
- Определение микросервисной архитектуры приложения
- Разбиение на сервисы
microservice/definition¶
microservice/deployment¶
- Шаблоны развертывания сервисов
- Шаблон “Формат пакетов для определенного языка”
- Шаблон “Бессерверное развертывание”
- Шаблон “Платформа развертывания”
- Шаблон “Сеть сервисов”
- Шаблон “Развертывание сервиса в виде контейнера”
- Шаблон “Развертывание сервиса в виде ВМ”
- Развертывание микросервисов
microservice/discovery¶
- Шаблон “Обнаружение на клиентской стороне”
- Шаблон “Саморегистрация”
- Шаблон “Обнаружение на стороне сервера”
- Шаблон “Реестр сервисов”
- Шаблон “Сторонняя регистрация”
- Обнаружение сервисов
microservice/domain-model¶
- Проектирование доменной модели с помощью шаблона “Агрегат” из DDD
- Шаблоны организации бизнес-логики
- Проектирование бизнес-логики в микросервисной архитектуре
microservice/isolation¶
microservice/isolation/countermeasure¶
- Контрмера “по значению”.
- Контрмера “коммутативные обновления”
- Контрмера “пессимистическое представление”
- Контрмера “повторное чтение значения”
- Контрмера “семантическая блокировка”
- Контрмера “файл версий”
microservice/isolation/problem¶
microservice/messaging¶
- Шаблон “Идемпотентный потребитель”
- Шаблон “Обмен сообщениями”
- Шаблон “Опрашивающий издатель”
- Шаблон “Отслеживание транзакционного журнала”
- Шаблон “публикация событий” или Outbox
- Канал сообщений
- Cообщение
- Стиль “Уведомления”
- Канал “Точка-точка”
- Стиль “Публикация-асинхронный ответ”
- Канал “издатель-подписчик”
- Стиль “публикация-подписка”
- Стиль “Запрос-асинхронный ответ”
- Стиль “Запрос-ответ”
- Использование асинхронного обмена сообщениями для улучшения доступности
- Взаимодействие с помощью асинхронного обмена сообщениями
- Конкурирующие получатели и порядок следования сообщений
- Использование брокера сообщений
- Дублирование сообщений
- Реализация стилей взаимодействия
- Транзакционный обмен сообщениями
microservice/observability¶
- Шаблон “Метрики приложения”
- Шаблон “Ведение журнала аудита”
- Шаблон “Распределенная трассировка”
- Шаблон “Отслеживание исключений”
- Шаблон “API проверки работоспособности”
- Шаблон “Агрегация журналов”
- Шаблоны наблюдаемости
- Seq
- Sentry
- Проектирование наблюдаемых сервисов
microservice/pattern¶
- Шаблон “Микросервисная архитектура”
- Шаблон “Монолитная архитектура”
- Шаблон “API-шлюз”
- Шаблон “Бэкенды для фронтендов” (BFF)
- Шаблон “Предохранитель”
- Шаблон “Обнаружение на клиентской стороне”
- Шаблон “Идемпотентный потребитель”
- Шаблон “Обмен сообщениями”
- Шаблон “Опрашивающий издатель”
- Шаблон “Повтор”
- Шаблон “Удаленный вызов процедур”
- Шаблон “Саморегистрация”
- Шаблон “Обнаружение на стороне сервера”
- Шаблон “Реестр сервисов”
- Шаблон “Сторонняя регистрация”
- Шаблон “Отслеживание транзакционного журнала”
- Шаблон “публикация событий” или Outbox
- Шаблон “Конфигурация, вынесенная вовне”
- Шаблон “Шасси микросервисов”
- Шаблон “Заготовка сервиса”
- Шаблон “Sidecar”
- Шаблон “Агрегат” из DDD
- Шаблон “Своя БД у сервиса”
- Шаблон “Доменное событие” из DDD
- Шаблон “Порождение событий”
- Шаблон “Повествование”
- Шаблон “Одна БД для сервисов”
- Шаблон “Разбиение по бизнес-возможностям”
- Шаблон “декомпозиция по поддомену”
- Шаблон “Формат пакетов для определенного языка”
- Шаблон “Бессерверное развертывание”
- Шаблон “Платформа развертывания”
- Шаблон “Сеть сервисов”
- Шаблон “Развертывание сервиса в виде контейнера”
- Шаблон “Развертывание сервиса в виде ВМ”
- Шаблон “Метрики приложения”
- Шаблон “Ведение журнала аудита”
- Шаблон “Распределенная трассировка”
- Шаблон “Отслеживание исключений”
- Шаблон “API проверки работоспособности”
- Шаблон “Агрегация журналов”
- Шаблон “Предохранительный слой”
- Шаблон “Удушающее приложение”
- Шаблон “Объединение API”
- Шаблон “Разделение ответственности команд и запросов”(CQRS)
- Шаблон “Токен доступа”
- Шаблон “тестирование контрактов с расчётом на потребителя”
- Шаблон “тестирование контрактов на стороне потребителя”
- Шаблон “Компонентный тест сервиса”
microservice/patterns¶
- Список шаблонов микросервисной архитектуры
- Шаблоны архитектуры приложения
- Шаблоны взаимодействия
- Шаблоны для решения сквозных проблем
- Шаблоны согласованности данных
- Шаблоны для разбиения приложения на микросервисы
- Шаблоны развертывания сервисов
- Шаблоны наблюдаемости
- Шаблоны перехода на микросервисы (рефакторинга)
- Шаблоны запросов данных
- Шаблоны безопасности
- Шаблоны автоматизированного тестирования
microservice/production¶
microservice/refactoring¶
- Шаблон “Предохранительный слой”
- Шаблоны перехода на микросервисы (рефакторинга)
- Шаблон “Удушающее приложение”
- Процесс перехода на микросервисы
microservice/request¶
- Шаблон “Объединение API”
- Шаблон “Разделение ответственности команд и запросов”(CQRS)
- Шаблоны запросов данных
- Выполнение запросов с помощью объединения API
- Применение шаблона CQRS
- Реализация запросов в микросервисной архитектуре
microservice/rpi¶
microservice/saga¶
- Шаблон “Повествование”
- Компенсируемые транзакции
- Повторяемые транзакции
- Структура повествования
- Поворотная транзакция
- Повествования, основанные на хореографии.
- Недостаточная изолированность
- Управление транзакциями в микросервисной архитектуре
- Повествования на основе оркестрации
- Координация повествований
- Управление транзакциями с помощью повествований
- Реализация повествований на основе хореографии с помощью порождения событий
- Совместное использование повествований и порождения событий
- Создание оркестратора повествования
- Реализация оркестраторов повествований с помощью порождения событий
- Реализация участника повествования
microservice/security¶
- Шаблон “Токен доступа”
- Шаблоны безопасности
- Разработка безопасных сервисов
- Обеспечение безопасности в микросервисной архитектуре
- Использование OAuth 2.0 в микросервисной архитектуре
microservice/testing¶
- Шаблон “тестирование контрактов с расчётом на потребителя”
- Шаблон “тестирование контрактов на стороне потребителя”
- Шаблон “Компонентный тест сервиса”
- Шаблоны автоматизированного тестирования
- Трудности тестирования микросервисов
- Написание модульных тестов для сервиса
- Тестирование микросервисов, часть 1
- Обзор методик тестирования
- Разработка компонентных тестов
- Написание сквозных (end to end) тестов
- Написание интеграционных тестов
- Тестирование микросервисов, часть 2
microservice/transaction¶
- Шаблоны согласованности данных
- Шаблон “Повествование”
- Контрмера “по значению”.
- Контрмера “коммутативные обновления”
- “Грязное” чтение
- Нечеткое чтение
- Контрмера “пессимистическое представление”
- Контрмера “повторное чтение значения”
- Контрмера “семантическая блокировка”
- Потеряные обновления
- Контрмера “файл версий”
- Компенсируемые транзакции
- Повторяемые транзакции
- Структура повествования
- Поворотная транзакция
- Повествования, основанные на хореографии.
- Недостаточная изолированность
- Управление транзакциями в микросервисной архитектуре
- Повествования на основе оркестрации
- Координация повествований
- Управление транзакциями с помощью повествований
microservice/transactions¶
- Шаблон “Опрашивающий издатель”
- Шаблон “Отслеживание транзакционного журнала”
- Шаблон “публикация событий” или Outbox
- Транзакционный обмен сообщениями
microservice/transition¶
- Реализация новых возможностей в виде сервисов
- Извлечение бизнес-возможностей в сервисы
- Процесс перехода на микросервисы
- Стратегии перехода с монолита на микросервисы
- Переход на микросервисы
- Разделение уровня представления и внутренних компонентов.
monitoring¶
monolith¶
multilayer¶
network¶
numeration¶
oauth2¶
on-premise/service¶
principles¶
protocol¶
reverse-proxy¶
router¶
script¶
security¶
- JWT
- Аутентификация для API и распределенных приложений
- Аутентификация в ASP.NET Core: сервисы и промежуточное ПО
- Аутентификация: добавляем пользователей в приложение с помощью ASP.NET Core Identity
- Взаимодействие с ASP.NET Core Identity
- Знакомство с аутентификацией
- Пользователи и утверждения в ASP.NET Core
- Авторизация в ASP.NET Core
- Авторизация: обеспечиваем защиту приложения
- Создание политики со специальным требованием и обработчиком
- Создание специальных политик авторизации
- Создание обработчика AuthorizationHandler на основе ресурсов
- Обработка запросов, не прошедших аутентификацию
- Скрытие элементов в шаблонах Razor от незарегистрированных пользователей
- Знакомство с авторизацией
- Ручная авторизация запросов с помощью интерфейса IAuthorizationService
- Предотвращение доступа анонимных пользователей к вашему приложению
- Управление доступом с авторизацией на основе ресурсов
- Требования и обработчики: строительные блоки политики
- Использование политик для авторизации на основе утверждений
- Изучение других векторов атак
- Повышаем безопасность приложения
- Предотвращение небезопасных прямых ссылок на объекты
- Обнаружение и предотвращение атак с открытым перенаправлением (open redirect attacks)
- Защита паролей и данных пользователей
- Межсайтовая подделка запроса (CSRF)
- Используем клиент на C# с JWT
- Разработка безопасных сервисов
- Обеспечение безопасности в микросервисной архитектуре
- Использование OAuth 2.0 в микросервисной архитектуре
- Применяем аутентификацию в SignalR
- Аутентификация на клиентах
- Конфигурируем приложение SSO
- Безопасность SignalR приложений
- Настраиваем IdentityServer 4
- Настраиваем поставщика единого входа
- Аутентификация
- Авторизация
security/OAuth20¶
security/OIDC¶
- Конфигурация ASP.NET Core
- Обезопасьте своё приложение с помощью OpenId Connect
- Используем клиент gRPC-web с JWT
- Настраиваем аутентификацию на сервере
system-operation¶
- Определение микросервисной архитектуры приложения
- Определение API сервисов
- Определение системных операций
testing¶
- Генерация случайных данных
- JustMock Lite
- System.IO.Abstractions
- Тестирование в ASP.NET Core
- Создание TestServer с помощью пакета TestHost
- Интеграционное тестирование: тестирование всего приложения в памяти
- Изоляция базы данных с помощью поставщика EF Core в памяти
- Уменьшение дублирования кода за счёт создания специального класса WebApplicationFactory
- Замена зависимостей в классе WebApplicationFactory
- Тестирование приложения с помощью класса WebApplicationFactory
- Тестирование приложения
- Модульное тестирование API-контроллеров
- Модульное тестирование специального промежуточного ПО
- Модульное тестирование с xUnit
- Трудности тестирования микросервисов
- Написание модульных тестов для сервиса
- Тестирование микросервисов, часть 1
- Обзор методик тестирования
- Разработка компонентных тестов
- Написание сквозных (end to end) тестов
- Написание интеграционных тестов
- Тестирование микросервисов, часть 2
transaction¶
useful-tool¶
versioning¶
- Версионирование API
- Предоставляем версии файлов Protobuf при помощи ASP.NET Core Minimal API
- Версионируем сервисы gRPC
- Семантическая нумерация версий
СУБД¶
заметка¶
конспект¶
- Книжка “ASP.NET Core в действии”
- Книжка “Начала использования gRPC с ASP.NET Core 6”
- Книжка “Микросервисы. Шаблоны разработки и рефакторинга”
- Книжка “SignalR на NET 6 - полное руководство”
цитата¶
Последнее обновление :
21 июля 2023 г.
Дата создания : 3 июля 2022 г.
Дата создания : 3 июля 2022 г.