Философия архитектуры ООП, SOLID-принципы, Dry, KISS и YAGNI

SOLID — за этой аббревиатурой скрываются 5 базовых принципов ООП, предложенные Робертом Мартином. Следование их духу сделает код легко тестируемым, расширяемым, читаемым и поддерживаемым. Вот шпаргалка по этим принципам:

  1. Single Responsibility Principle (принцип единственности ответственности) — один класс отвечает за один функционал. Проектируя класс, попробуйте сгруппировать его методы по тем сущностям и процессам, с которыми они работают. Если легко можно выделить несколько групп, то стоит подумать о выделении отдельных сущностей и переносе этих методов в них.
  2. Open/Closed Principle (принцип открытости/закрытости) — сущности должны быть открыты к расширению, но закрыты — к изменению. То есть, например, класс должен с самого начала проектироваться так, что любое дальнейшее развитие функционала не потребует изменения кода самого этого класса, но позволит расширить функционал с помощью подклассов и т.п.
  3. Liskov Substitution Principle (принцип подстановки Барбары Лисков) — сущность, использующая объект, который реализует определенный интерфейс, должна иметь возможность использовать другой объект с тем же интерфейсом, даже «не зная» о факте подмены. То есть программируем к интерфейсу, а не к его конкретной реализации.
  4. Interface Segregation Principle (принцип разделения интерфейса) — клиентский код не должен зависеть от методов, которые не использует. То есть нужно избегать интерфейсов, имеющих много методов — не все из них будут востребованы клиентами. Лучше иметь несколько интерфейсов с небольшим числом методов, чем один — с большим.
  5. Dependency Inversion Principle (принцип инверсии зависимостей) — модули высшего порядка не должны зависеть от модулей низшего порядка, и те, и другие должны зависеть от абстракций; детали должны зависеть от абстракций, но не наоборот. В общем, класс не должен иметь жестко прописанных в нем зависимостей от объектов других классов, например, через оператор new. Вместо этого зависимости должны быть вынесены из класса, чтобы уменьшить степень связанности кода. Этот принцип реализуется несколькими способами, мы уже писали про самый популярный — внедрение зависимости.

Кроме SOLID, есть еще такие принципы, как:

  1. KISS — Keep It Simple, Stupid! (делайте вещи проще) — не нужно усложнять дизайн там, где в этом нет необходимости. Чем проще, тем лучше.
  2. DRY — Don’t Repeat Yourself (не повторяйтесь) — не нужно «изобретать велосипед». Любой функционал в коде должен быть реализован ровно один раз, не говоря уже о том, что copy-paste-кода вообще не должно быть.
  3. YAGNI — You Ain’t Gonna Need It (вам это не понадобится) — нужно ориентироваться на реальную экономическую необходимость. Если от кода не требуется каких-то вещей, то не нужно их реализовывать. Например, если вы работаете над маленьким сайтом, который надо сдать в сжатые сроки, и который приурочен к одному мероприятию, после чего будет закрыт, то не надо продумывать его архитектуру с точки зрения возможного расширения функционала в будущем. В общем, надо оценивать необходимость своего труда взвешенно.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.