Ответ вслух Middle ООП в C# спрашивают часто обновлено

SOLID на примерах из .NET

Вопрос

Расскажите про SOLID с примерами из вашего C#-кода.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

S, единственная ответственность: у класса одна причина меняться. Например, контроллер только принимает запрос, бизнес-логика в сервисе, доступ к данным в репозитории или DbContext.

Что должно прозвучать в ответе

  • S: класс с одной причиной для изменения, например отдельные сервис и репозиторий

  • O: расширение без правки, стратегии через интерфейсы и регистрацию в DI

  • L: наследник подставим вместо базы, пример Square и Rectangle или NotImplementedException

  • I: узкие интерфейсы вместо одного толстого (IReadRepository и IWriteRepository)

  • D: зависимость от абстракций, внедрение через конструктор и контейнер ASP.NET Core

  • Принципы как ориентир, а не догма: без лишних абстракций ради абстракций

Что могут спросить следом

  • Как DI-контейнер помогает соблюдать DIP?
  • Приведите пример, где следование OCP усложнило код.
  • Чем DIP отличается от DI?

Разбор

S, единственная ответственность: у класса одна причина меняться. Например, контроллер только принимает запрос, бизнес-логика в сервисе, доступ к данным в репозитории или DbContext.

O, открытость для расширения: новые способы оплаты я добавляю новой реализацией IPaymentProvider и регистрацией в DI, не трогая существующий код со switch.

L, подстановка Лисков: наследник не должен ломать ожидания. Классический пример: квадрат, унаследованный от прямоугольника. На практике нарушение выдаёт NotImplementedException в реализации интерфейса.

I, разделение интерфейсов: лучше IReader и IWriter, чем один интерфейс на двадцать методов, половину из которых клиент не использует.

D, инверсия зависимостей: бизнес-логика зависит от абстракций, а конкретные реализации подставляет контейнер ASP.NET Core через конструктор. При этом я не делаю интерфейс на каждый класс без причины: принципы помогают, пока снижают стоимость изменений.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме