Backend-практикум

Best practices в разработке приложений на .NET

С 2012 мы пишем и развиваем бизнесовое ПО на .NET. Для реализации бизнес-логики всегда работаем с Domain-Driven Design и другими инструментами, позволяющими строить расширяемые и поддерживаемые решения. Если интересно узнать об этих подходах на уровне кода, посмотри видео-обзор нашей инфраструктуры на .NET Core.

У нас достаточно глубокая экспертиза в работе над проектами с постоянно развивающейся объемной бизнес-логикой. Ей делимся на практикумах и митапах. К сожалению, проводим их не постоянно: организация и подготовка занимают много времени, а основные проекты не ждут.

Записи с последнего летнего backend-практикума ты найдешь ниже. Если хочешь попасть на оплачиваемую стажировку к нам, стоит их изучить: этого требует решение тестового.

Если у тебя возникли вопросы по коду, задай их в пермский чат .NET-разработчиков.

Тимлид Константин с докладом о DDD

Кому подойдет

Старшекурсникам, Junior и Middle .NET

Если ты уже знаешь, как устроен фреймворк, умеешь читать чужой код на .NET, имеешь навыки работы с SQL и хочешь узнать о том, как превратить плохой код в хороший.

А кому — нет

Незнакомым с синтаксисом, младшим курсам, студентам непрофильных специальностей

Если ты не знаком с фреймворком, принципами ООП и основами БД, практикум, к сожалению, будет непонятен.

Когда
дата следующего практикума обсуждается

Где
трансляция на YouTube,
обсуждение в Discord, поддержка в PRM .NET

Документы
сертификат участия,
отчет о практике для студентов

Формат
улучшение решения с каждой итерацией, лекция по теме, разбор кода, ответы на вопросы и код-ревью

Записи занятий

На примере конечной задачи показываем, как может улучшаться программное решение. В этом видео мы запилили нужную функциональность в лоб: задача решена, но в долгосрочной перспективе код неоптимален.

Первая итерация по улучшению исходной версии. Укладываем бизнес-логику в единственное место, а не размазываем и дублируем по приложению.

Знакомимся с понятиями Domain-Driven Design.

Продолжаем рефакторинг приложения. Два глобальных изменения: начали использовать Dependency Injection и завели всё для Command and Query Separation (CQS).

Рефакторим дальше.

Прибираемся в Startup-е, делегируем управление зависимостями Autofac-у, разбираемся с Dto, подключаем Automapper, прибираемся в контроллерах и уносим логику экшенов в Handler-ы.

Подключаем ORM на примере NHibernate и Fluent NHibernate.

Занимаемся развитием предметной области и разбираем последние необходимые изменения кода.

Показываем, как теперь можно изменить предметную область, не переписывая всё с нуля.

Участники о практикуме

// Софья Гилязева, участница летнего backend-практикума:

«Спасибо за такую крутую devrel-инициативу! Наглядно показали эволюцию приложения. На мой взгляд темы были достаточно понятны, если разработчик уверенно владеет/видел в действии/знает/слышал даже про соседнюю концепцию.

То есть получилось идеально для разработчика, который:

  • может быть даже немного знаком с .NET Core,
  • знает о понятии инверсии управления и внедрении зависимостей,
  • видел в действии onion-архитектуру или подобную,
  • знаком с любой ORM,
  • но хорошо понимает работу с обобщенными типами в .NET.

Если плохо, то без пол-литра не уследить за всеми абстракциями)».

Ведущие практикума — тимлид Константин и старший разработчик Михаил

Что еще интересного проводили

Мы делимся опытом не только с джуниорами, но и с матёрыми специалистами. Вот что они говорят о наших митапах:

До этого была уверена, что умею выделять слои и строить ООП-архитектуру

// Катя Бакулева про про Tados Dev School:

«В школе „Тадос“ была тема — DDD, сейчас я понимаю, что вместе с ней прояснились в принципе объектно-ориентированное проектирование и разделение приложения на слои, хотя до этого я была уверена, что отлично умею выделять слои и строить ООП-архитектуру. Позже я предпринимала несколько попыток разработки проекта по DDD, они провалились, потому что для этого необходимо вовлечение всей команды, но это уже мои проблемы)

В любом случае, именно тогда ко мне пришла ясность, что нужно строить на абстракциях, куда какую логику складывать. А, и да, IoC-контейнеры, я знала что это и зачем, но никогда не использовала, мне они казались каким-то оверхэдом и только лишними проблемами. В общем-то, понимание принципов расслоения приложения вместе с тем, как на абстракциях делать слои гибкими, привело к пониманию, зачем нужны контейнеры)

Паттерн репозиторий — использовала и использую все ещё.
CQRS — использовала в прошлых проектах, использую в текущем, регулярно участвую в спорах в интернете на тему, как это готовить, брат жив, пацаны с райёна респектуют https://github.com/Lolialoneathome/cqrs_new_age».

Катя Бакулева, Михаил Чесноков (сейчас разработчик Tados) и Кирилл Лопатин — слушатели Tados Dev School

Чувствовал, что мозг готов взорваться от обилия информации

// Кирилл Лопатин про Tados Dev School:

«Tados Dev School оставила много положительных эмоций)) и знаний которые пригодятся любому разработчику. На уроках были подняты и разобраны интересные темы, материал обсуждался и объяснялся до тех пор, пока не станет понятен всем.

Особенно хочется отметить темы связанные с архитектурой (DDD и CQRS). Начинающий разработчик может хорошо знать свой язык программирования, принципы вроде SOLID, алгоритмы и структуры данных, но скорее всего не имеет представления о проектировании архитектуры приложения. Поэтому я рад, что этим темам было уделено много внимания.

Каждый раз выходя из офиса, я чувствовал, что мой мозг готов взорваться от обилия информации полученной там и я понимал, что ребята из Tados — профессионалы своего дела.
Спасибо за полезные навыки и знания))».

Упрощает жизнь при долгосрочной разработке

// Дмитрий Осипович про BACK to Dev School:

«1. Понравилось про IoC контейнеры, я их использовал в .Net Core, поэтому мне было на самом деле понятно и про DI, и про Release.

2. Про DDD я понял только, что нужно создавать „единый язык“ между слоями и что это упрощает жизнь при долгосрочной разработке. И его не везде нужно юзать, как Катя :))

3. Докер интересная штука, использовать я его конечно не буду. Мне пока что хватает облаков типа Azure, в которых в один publish-клик веб-приложение улетает вместе со всеми сервисами и работает без нареканий уже несколько лет».

BACK to Dev School

Подпишись на анонсы

Во ВКонтакте для разработчиков у нас отдельная рассылка. Не спамим, не хантим, делимся опытом и анонсами активностей.