Перейти к основному содержимому

Принципы ОО-проектирования перед паттернами

Разработчику Архитектору

Паттерны GoF — именованные схемы, которые уже следуют здравому ОО-проектированию. Если сначала выучить только названия (Strategy, Factory, Observer), легко начать «накручивать» классы без понимания, зачем они появились. Ниже — четыре опорных принципа, на которых обычно строят вводные курсы по паттернам, в инженерной формулировке и со связью с SOLID.

Порядок чтения

Эта статья → десять частых паттернов → узкие главы по языку (C#, Java) → составные паттерны и MVC. Полный справочник GoF — в большом гиде.


Четыре опорных принципа

ПринципСутьТипичный симптом нарушения
Инкапсулируйте то, что изменяетсяВсё, что может меняться по требованиям, выносите в отдельные части (поля, классы, интерфейсы)Один if на новый тип утки/оплаты/канала в десяти методах
Предпочитайте композицию наследованиюПоведение собирайте из объектов, а не только из глубокой иерархии субклассовРезиновая утка «наследует» fly(), хотя летать не должна
Программируйте на уровне интерфейсовКлиент зависит от абстракции (FlyBehavior, PaymentMethod), а не от MallardDuckМетод принимает PostgresRepository, хотя нужен любой Repository
Стремитесь к слабой связанностиМодули знают друг о друге минимум, нужный для работыИзменение в модели ломает пять UI-компонентов

Эти четыре правила — не замена SOLID, а лестница к нему: их проще запомнить на старте, а затем уточнить формулировками Мартина (SRP, OCP, LSP, ISP, DIP).


Связь с SOLID

Опорный принципБлижайший SOLIDПаттерн, который иллюстрирует идею
Инкапсуляция измененийO (открытость/закрытость)Декоратор, Стратегия
Композиция вместо наследованияL (подстановка Лисков)Стратегия, Декоратор
Интерфейсы вместо классовD (инверсия зависимостей)Фабричный метод, DI в Фабрике C#
Слабая связьI + DНаблюдатель, Фасад
(дополнительно в книге) Единственная ответственностьSРазделение Model / View / Controller в MVC

Полный разбор с примерами кода — в статье Принципы SOLID.


Дополнительные правила на ревью

К четырём опорным принципам на практике добавляют уточнения из SOLID и повседневного проектирования:

  • Принцип открытости/закрытости — расширяйте поведение без правки стабильного кода (Декоратор).
  • Инверсия зависимостей — высокоуровневые модули не зависят от деталей создания объектов (порождающие паттерны).
  • Принцип наименьшего знания — объект общается только с ближайшими «друзьями» (Фасад, Адаптер).
  • Голливудский принцип — «не звоните нам, мы вам позвоним»: фреймворк вызывает ваши хуки, а не наоборот (Шаблонный метод).
  • Единственная ответственность — один повод для изменения на класс (разделение Model / View / Controller в MVC).

Сначала простой код, потом паттерн

Учебник подчёркивает: паттерн — инструмент по необходимости, а не цель архитектуры. Практичный порядок действий:

  1. Напишите самое простое решение, которое проходит тесты и читается командой.
  2. Отметьте, что в коде меняется чаще всего (алгоритмы, UI, интеграции, правила состояний).
  3. Примените один из четырёх принципов выше (часто достаточно вынести интерфейс или композицию).
  4. Если схема повторяется в проекте и в индустрии — дайте ей имя из GoF и согласуйте с командой.

Рефакторинг — естественная точка для паттернов: длинные switch по состоянию намекают на Состояние, жёсткие new в клиенте — на фабрику. Подробнее о том, когда паттерн лишний, — в обзоре раздела.


См. также

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").