О чём это
Программировать — сложно.
Хороший код адекватно отражает систему, которую описывает, он устойчив к изменениям в этой системе. Плохой код запутанный, хрупкий и непонятный — он замедляет разработку.
Код становится плохим, когда он перестаёт соответствовать реальности — бизнес-требованиям, правилам поведения частей системы, их отношениям друг с другом.
Бизнес-правила — это территория. Код — карта этой территории. Чем точнее карта, тем проще справляться с изменениями в требованиях и даже предвидеть их.
В этой книге мы хотим рассказать и показать на примерах, как принципы объектно-ориентированного программирования могут помочь спроектировать устойчивую систему.
Почему ООП?
Объектно-ориентированное программирование, ООП, вызывает споры.
Война парадигм может создать впечатление, что подход ООП устарел и плох. Но ООП — это всего лишь инструмент. У каждого инструмента есть удобства, недостатки и область применения. Инструмент должен оставаться способом решения задачи и не должен становиться самоцелью.
ООП, как инструмент, может помочь спроектировать систему на языке, более близком к языку бизнес-правил. Это снижает вероятность ошибки при переводе с «языка бизнеса» на «язык разработки» и наоборот.
О каких принципах пойдёт речь?
Мы рассмотрим 5 принципов SOLID, а именно:
- принцип единственной ответственности (single responsibility principle);
- открытости и закрытости (open/closed principle);
- подстановки Барбары Лисков (Liskov substitution principle);
- разделения интерфейса (interface segregation principle);
- инверсии зависимостей (dependency inversion principle).
Каждый из них — это лишь рекомендация, все они имеют область и границы применения. Но чтобы увидеть эти границы, необходимо понять, в чём польза и издержки каждого.
Многие принципы вам покажутся чрезмерно абстрактными, неконкретными или вовсе надуманными. Отнеситесь к таким принципам, как к дзену Python — держите в голове, но проверяйте, насколько они полезны в конкретной ситуации.
Мы в этой книге предлагаем ещё одну из бесконечных интерпретаций этих принципов, попутно расписывая пользу и ограничения каждого. Зная пользу и ограничения, можно оценить, насколько конкретный принцип помогает решить задачу, стоящую перед вами.
Какой план?
Каждый раздел будет описывать один из принципов и показывать, как им пользоваться в повседневной работе.
Мы будем рассматривать примеры на TypeScript Deep Dive — она содержит все концепции, которые мы будем использовать.
В конце разделов вы найдёте проверочные вопросы. Каждый правильно отвеченный вопрос увеличивает количество очков на вашем счету. Максимально-возможный счёт — 100 очков. Отвечайте аккуратно — вопросы с подвохом. Обратите внимание, вариантов ответа может быть больше одного.