логотип. Sachkov Tech
По всем вопросамзаписаться.

Доступные интенсивы

  • Архитектура и структура .NET веб-приложений. Проектирование ASP.NET Core сервисов.

    16 уроков14 часов
    + стрим с ответами на вопросы

    На этом интенсиве вы с нуля освоите проектирование и разработку современных .NET веб-приложений с использованием ASP.NET Core! Этот интенсив подойдет для начинающих разработчиков, которые хотят углубить свои знания в архитектуре, проектировании и создании масштабируемых веб приложений на основе монолитной и модульной архитектуре.

    Приобрести

Архитектура и структура .NET веб-приложений. Проектирование ASP.NET Core сервисов.

Почему этот интенсив?
  • Практико-ориентированный подход: каждый этап сопровождается реальными примерами и заданиями
  • Глубокое погружение в архитектуру: вы поймете, как с нуля проектировать приложения, которые легко поддерживать и масштабировать
  • Актуальные технологии: ASP.NET Core, REST API, EF Core, FluentValidation, Scrutor, CQRS и многое другое
  • Свой проект: вы узнаете, какие идеи и проекты можно реализовать на ASP.NET Core, и сможете придумать свою уникальную идею для нового проекта
Для кого этот интенсив:
  • Разработчики, которые хотят улучшить свои навыки в проектировании и архитектуре .NET веб-приложений.
  • Те, кто хотят научиться создавать масштабируемые и поддерживаемые веб-приложения на актуальном стэке.
  • Все, кто хочет создать свой уникальный пет проект на ASP.NET Core, который поможет при трудоустройстве.
Результат:
  • Вы сможете самостоятельно проектировать и разрабатывать сложные .NET веб-приложения, используя лучшие практики и современные архитектурные подходы.
  • Не упустите возможность прокачать свои навыки и стать специалистом в разработке .NET веб-приложений!

Программа интенсива

  • Какие бывают проекты и как придумать идею для проекта?
  • Конкретные примеры идей
  • Определяем функционал веб-приложения
  • Проектирование предметной области
  • Модули. Как правильно разделить проект на модули
  • Как устанавливать связь между модулями
  • Cohesion, что это и для чего нужно
  • Coupling, что это и для чего нужно

  • Проектирование REST API. Что такое REST API?
  • Создание ресурса, метод POST
  • Получение ресурса, метод GET
  • Зачем иногда следует использовать POST вместо GET
  • Получение ресурса по ID
  • Обновление ресурса
  • Удаление ресурса
  • Важные правила при проектировании REST API
  • Проектирование более сложных endpoint'ов

  • Какую архитектуру выбрать для проекта? Монолит, модульный монолит, микросервисы
  • Монолитная архитектура
  • Модульный монолит
  • Микросервисная архитектура

  • Чистая архитектура, что это и зачем нужно?
  • Какие раньше были архитектуры?
  • Что такое бизнес логика?
  • Основные концепции чистой архитектуры
  • Слои в чистой архитектуре. Первый слой - Entities
  • Внешние слои
  • Пример проекта с чистой архитектурой

  • Создание репозитория
  • Создание проекта
  • Добавление .gitignore
  • Создание канбан доски для задач
  • Работа с ветками и задачами
  • Создание доменного проекта
  • Создание моделей в предметной области
  • Почему GUID а не long?
  • Анемичная и богатая модель
  • Связи между моделями и модулями
  • Прямая ссылка или Guid
  • Решение проблемы nullable reference
  • Древовидная структура, parent - children
  • Проектирование других сущностей

  • Коммит и пуш изменений, пуллреквест и мерж
  • Создание Asp Net Core проекта
  • Создание слоя Presenters с контроллерами
  • Настраиваем swagger и open api
  • Editorconfig и stylecop, анализатор кода
  • Directory.Build.props для чего нужен
  • Проект WEB против Presenters
  • Методы в контроллере на практике
  • ActionResult и статус коды
  • Параметры в методах контроллера [FromBody] и другие
  • DTO модели
  • Проект с контрактами
  • Пишем остальные HTTP методы на практике
  • Получение данных. HTTP GET метод
  • Обновление данных. HTTP PUT метод
  • Удаление данных. HTTP DELETE метод
  • Другие HTTP методы для различных фич

  • Коммит и пуш изменений
  • Формируем задачу, работа с Application слоем
  • Документация enum'ов
  • Зачем нужен Application слой
  • Создание Application слоя на практике, установление зависимостей
  • Создаём первый сервис. Что такое сервис
  • Какие параметры должен принимать сервис
  • Формируем бизнес сценарий в сервисе
  • Создание сущности в сервисе
  • Как работать с базой данных в Application слое. Dependency inversion принцип.
  • Что такое репозиторий и зачем он нужен
  • Какие модели использовать для работы с базой данных? Domain vs DTO vs Datamodels
  • Почему нужно начитать разработку с интерфейсов?
  • Какие должны быть папки в проекте? Как распределить файлы по папкам
  • Как писать логи
  • Работа с валидацией. Основные концепции. Где должна быть валидацияВалидация входных параметров. Валидация бизнес логики
  • FluentValidation, как пользоваться библиотекой?
  • Валидация бизнес логики. Правила в сценариях
  • Как использовать сервисы в контроллерах
  • Как и где правильно регистрировать зависимости

  • Инфраструктурный слой, что это и для чего нужен
  • Создание инфраструктурного слоя для базы данных
  • Инверсия зависимостей, объясняю на примере
  • Нужно ли использовать репозитории
  • Пример как можно реализовать сидирование
  • Что ещё может быть в инфраструктуре? Примеры инфраструктурных слоёв
  • Как регистрировать инфраструктуру в DI? Extension методы
  • Подвожу итоги по инфраструктуре

  • Почему важно правильно работать с ошибками
  • Создание кастомных Exceptions
  • Класс Error и Shared проект. Правильно работаем с ошибками
  • Как вернуть ошибки валидации с помощью Exception
  • Как правильно обрабатывать ошибки, Exception middleware
  • Почему Exceptions это не всегда хорошо

  • Когда нужно использовать Exceptions
  • Когда нужно использовать Result паттерн
  • Зачем нужен Result паттерн, что это такое
  • Самая простая реализация Result паттерна с помощью кортежей
  • Класс Result, пример его использования
  • Result, как вернуть значения из Result
  • Неявное преобразование
  • Библиотека CsharpFunctionalExtensions
  • Возвращаем список ошибок
  • Кастомная коллекция Failure
  • Возвращаем список ошибок
  • Пример кода с try catch + Result
  • Метод расширения для красивого ответа клиенту, статус коды

  • Метод AddAnswer
  • Что должен возвращать метод в сервисах
  • Документация методов, summary
  • Добавляем нужные зависимости и начинаем писать логику метода, валидация
  • Два способа, как добавлять дочернюю сущность в базу данных
  • Первый способ, если используете Dapper
  • Что может пойти не так в бизнес сценарии, откуда берутся баги
  • Как управлять транзакцией в Application слое, TransactionManager
  • Второй способ добавления дочерней сущности в базу данных
  • Добавляем новые бизнес правила и усложняем метод
  • Как обратиться к другому модулю в разных случаях, новый инфраструктурный слой

  • Разделение сервиса на части
  • Как правильно назвать обработчик
  • Вынесение фичи в отдельный класс
  • Создание папок для фич, удобный способ
  • Общий интерфейс для обработчиков
  • Паттерн команда (command), что это такое и зачем нужны команды
  • ICommandHandler
  • ICommand, улучшение интерфейса
  • Как в контроллере правильно вызвать Handler
  • Как удобно зарегистрировать все обработчики в DI
  • Scrutor, расширяем возможности Dependency Injection
  • Получение данных

  • Как получать данные?
  • Пишем фичу на получение данных с фильтрами
  • Какие модели возвращать из бэкенда? Создаём DTO
  • Получаем данные с помощью репозитория, способ первый
  • Получаем связанные данные из другого хранилища, пример с файлами
  • Extension метод для Enum, из Enum в строку
  • Минусы использования репозитория для получения данных
  • Второй способ, использование DbContext в Handler
  • Как использовать DbContext в Application
  • IQueryable в DbContext
  • Пишем запросы в Handler с помощью DbContext
  • Паттерн CQS, разделение операций на запись и чтение
  • Добавление IQuery и IQueryHandler
  • Что если мы не используем EF Core, а используем Dapper

  • Рассматриваем обычное монолитное решение
  • Как будет выглядеть модульный монолит
  • Меняем структуру проекта, создаём новые проекты
  • Показываю как должен выглядеть модульный монолит
  • Проект Shared
  • Папка Infrastructure
  • Остальные проекты в Core
  • Пример модуля Questions
  • Архитектура Vertical Slice Architecture для небольших модулей
  • Minimal API для фич
  • Как регистрировать ендпоинты в Minimal API
  • Взаимодействие между модулями с помощью контрактов
  • Как регистрировать DI в модулях

  • Пушим прошлую задачу в github
  • Настриваем Github actions

  • Что такое Mediatr
  • Внедрение Mediatr в проект
  • Behaviors, Cross-cutting concerns
  • Декораторы

Приобрести
9 900 ₽ 14 900 ₽