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

По технологиям и языку вроде как уже ясно, но на собеседованиях частенько спрашивают про какие-то паттерны проектирования, подходы программирования, шаблоны и тд... Что ещё нужно знать junior .net developer помимо технологий и языка?

Паттернов проектирования на самом деле очень много, и никто точно не скажет какой именно из них пригодится Вам для написания приложения (и пригодится ли какой-то вообще). Тут уже нужно ориентироваться на проект, который Вы будете разрабатывать. Но я всё-же постараюсь описать несколько паттернов, которые, как по мне, являются самыми популярными.

1. Strategy паттерн.

Идея паттерна "Стратегия" является определение инкапсуриуемых алгоритмов, которые будут являться взаимозаменяемыми. Этот паттерн позволяет изменять (заменять) алгоритмы независимо от клиентов, которые пользуются Вашим приложением.

Используется паттерн на самом деле практически везде и Вы неоднократно использовали его даже в самых простых своих приложениях. Например, при написании обыкновенного метода сортировки реализуя один и тот же интерфейс IComparable мы можем создать кучу разных алгоритмов сортировки, которые являются взаимозаменяемыми, и использовать их в зависимости от данной Вам структуры данных, её параметров и тд.

2. Fabric паттерн.

Паттерн Фабрика предоставляет один интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, при этом без явного указания конкретных классов.

Данный паттерн Вы тоже, вероятнее всего, использовали неоднократно. Системный класс SystemConvert, с кучей статических методов типа Convert.ToInt32, Convert.ToBoolean и тд реализуют Фабрику. По сути, на основе одной переменной, без спецификации конкретного класса преобразуется новая переменная с новым типом данных.

Используется он для того что б упростить создание объекта и скрыть сложность в его создании. Для того что б изменить детали создания объекта нужно лишь немного изменить фабрику, и не придётся менять каждое место, где был вызван конструктор.

3. Iterator.

Итератор нужен для доступа к элементам массива через перечислитель foreach. По сути, реализация итератора - реализация паттерна Итератор.

4. Observer.

Суть паттерна Наблюдатель заключается в оповещении объектов "подписчиков" обо всех изменениях объекта "издателя".

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