Нас часто спрашивают, с чего начать, чтобы успешно работать в .NET-стеке. Подготовили список полезных материалов по технологиям, архитектуре и проектированию.
Язык
Советуем освежить знания по C#. Многие считают, что разбираются в нем идеально. Однако спотыкаются то о generic-и, то о рефлексию, то об async/await и task-и (в принципе с TPL проблемы встречаются часто). Этим не стоит пренебрегать — в конечном итоге будет проще работать с необходимыми технологиями, изучать и понимать код и архитектуру.
Минимальная литература по .NET и C#:
- «Язык программирования C# и платформы .NET и NET Core» /
«Pro C# and the .NET Framework»,
Эндрю Троелсен (постоянно дополняется, чем свежее издание, тем лучше); - «CLR via C#», Джеффри Рихтер;
- «Оптимизация приложений на платформе .NET» /
«Pro .NET Performance: Optimize Your C# Applications»,
Саша Голдштейн.
Обязательно ознакомьтесь с идеологией, архитектурой и особенностями .NET Core. Мы давно ведем разработку именно под Core, а не под Framework — это важно с учетом кроссплатформенности и перспектив развития.

.NET
Для веб-разработки под .NET вариантов немного — это ASP.NET WebForms / MVC / Web Api и ASP.NET Core.
ASP.NET WebFroms можно даже не смотреть. Стоит ли вкладываться в изучение именно ASP.NET — вопрос. Возможно, для начала — да, чтобы погрузиться и пощупать технологию. Тогда достаточно любой обзорной литературы. Например: https://professorweb.ru/my/ASP_NET/base/level1/base_aspnet_index.php — коротко, просто и почти обо всем. Для первого знакомства неплохо.
ASP.NET Core более продуман, так как является переосмыслением архитектуры. В основе хорошо продуманный пайплайн из middleware, инверсия зависимостей уже лежит в сердце самой технологии и т. д. Плюсов по сравнению с ASP.NET много, поэтому необходимость изучения последнего под сомнением. Изучать ASP.NET Core — только по официальным докам https://docs.microsoft.com/en-us/aspnet/core/. Это лучшая литература. Плюс всегда есть возможность посмотреть исходники на Гитхабе.
Архитектура и код
Если говорить об общей литературе, которая поможет придерживаться хорошей архитектуры в приложениях, следует обязательно прочесть:
- «Паттерны проектирования» / «Design Patterns»,
Элизабет Фримен, Эрик Фримен, Кэти Сиерра, Берт Бейтс; - «Шаблоны корпоративных приложений» /
«Patterns of Enterprise Application Architecture»,
Мартин Фаулер.
Для дисциплины при написании кода:
- «Чистый код: создание, анализ и рефакторинг» / «Clean Code»,
Роберт Мартин; - «Совершенный код» / «Code Complete»,
Стив Макконнелл.

Проектирование
При разработке энтерпрайз-приложений мы используем предметно-ориентированное проектирование (DDD). Часть используемых технологий была выбрана как раз в силу того, что они лучше сочетаются с данным подходом к структурированию и разработке приложений.
По DDD обязательно к прочтению:
- «Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем» /
«Domain-Driven Design: Tackling Complexity in the Heart of Software»,
Эрик Эванс; - «Domain Driven Design Quickly»,
Флойд Маринеску, Эйбел Аврам (хватит только для обзорного знакомства).
Работа с данными
Для реализации слоя работы с данными используем NHibernate + Fluent NHibernate и Dapper (с трудом можно назвать ORM, скорее просто средство для маппинга). Не рекомендуем использовать Entity Framework: он очень плохо вяжется с DDD.
По ORM только официальная документация:
- NHibernate — https://nhibernate.info/doc/index.html;
- Fluent NHibernate — https://github.com/jagregory/fluent-nhibernate;
- Dapper — https://github.com/StackExchange/Dapper.
Управление зависимостями
Для полноценной работы необходимо знать, что такое инверсия зависимостей, контроля, IoC-контейнеры. Теории в сети навалом — от Википедии до Хабра. Из IoC-контейнеров используем Autofac. Доки читать официальные: https://autofaccn.readthedocs.io/en/latest/getting-started/.
На что подписаться
Много хороших постов по архитектуре .NET-приложений можно найти в блоге Александра Бындю https://blog.byndyu.ru/. Стоит обратить внимание как минимум на CQRS, Event Sourcing, распределенную архитектуру и Integration Patterns.