тре приложений и программных сред.
Ценность паттернов, практик и компонентов
Прежде чем тратить ценное время на чтение книги о набо-ре паттернов, которые, с моих слов, усовершенствуют ваши подходы к работе, научат вас новым приемам разработки и — давайте посмотрим правде в глаза — изменят вашу жизнь, имеет смысл спросить: «А зачем?» Что такого есть в паттернах и методиках разработки, что может поменять подход к проек-
тированию и компоновке программного обеспечения? В этом разделе я объясню, почему считаю их важными. Надеюсь, мои доводы убедят вас прочесть книгу полностью. Стоя на плечах гигантов 1
Начнем с того, что паттерны проектирования распределенных систем позволяют, образно говоря, стоять на плечах гигантов. Задачи, которые мы решаем, или системы, которые мы создаем, нечасто становятся действительно уникальными. В конечном итоге собранные воедино компоненты и общая бизнес-модель, которую позволяет организовать разрабатываемое программ-ное обеспечение, являются чем-то новым. Но то, как система построена, и те проблемы, с которыми она сталкивается в сво-ем стремлении быть надежной и масштабируемой, отнюдь не Глава 1. Введение 25
В этом, стало быть, состоит первая ценность паттернов: они позволяют учиться на чужих ошибках. Возможно, вы нико-гда раньше не разрабатывали распределенные системы. Воз-можно, вы никогда раньше не разрабатывали определенный
вид распределенных систем. Вместо того чтобы надеяться на опыт вашего коллеги в этой области или учиться на ошибках, которые совершали другие, вы можете обратиться за помощью к паттернам.
Изучение паттернов проектирования распределенных систем — то же самое, что изучение любых других передовых практик компьютерного программирования. Оно ускоряет разработку программного обеспечения, не требуя наличия непосредствен-ного опыта разработки систем, исправления ошибок и набива-ния собственных шишек.
Общий язык обсуждения
подходов к разработке
Возможность учиться, а также лучше и быстрее понимать раз-работку распределенных систем — лишь часть преимуществ от наличия общего набора паттернов проектирования. Паттерны ценны даже для опытных разработчиков распределенных си-
стем, уже хорошо их понимающих. Паттерны предоставля-ют общий словарь, позволяющий нам быстро понимать друг друга. Понимание — основа обмена знаниями и дальнейшего обучения.
Для того чтобы было понятнее, представим, что мы оба исполь-зуем один и тот же инструмент для постройки дома. Я называю его «сепулька», а вы называете его «бутявка». Как долго мы бу-дем спорить о преимуществах «сепулек» над «бутявками» или пытаться объяснить различие в их свойствах, пока не придем к тому, что это одно и то же? Только когда мы придем к тому, 26Глава 1. Введение
что «сепульки» и «бутявки» — одно и то же, мы сможем учиться на опыте друг друга.
При отсутствии общего словаря много времени тратится либо на споры в поисках «насильственного согласия», либо на объ-яснение понятий, которые остальные понимают, но называют по-другому. Следовательно, ценность паттернов состоит еще и в том, что они обеспечивают наличие общего набора понятий и их определений, позволяющего не тратить время на дискус-сии об именах, а перейти к обсуждению деталей реализации основных идей.
За то короткое время, что я работал над технологией кон-тейнеров, я убедился в этом. На тот момент идея контейне-ров-прицепов (будут описаны в главе 2) прочно укрепилась в сообществе «контейнерщиков». Благодаря этому не было необходимости тратить время на разъяснение того, что зна-чит быть контейнером-прицепом, а вместо этого можно было перейти к обсуждению того, как использовать этот паттерн для решения конкретной задачи. «А вот если мы здесь ис-пользуем паттерн Sidecar...» — «Ага, кажется, я знаю, какой контейнер отлично подойдет для этой задачи». Этот пример подводит нас к третьему показателю ценности паттернов про-ектирования — возможности создания повторно используе-мых компонентов.
Общие повторно используемые компоненты
Паттерны позволяют учиться на чужом опыте и предоставляют общий язык для обсуждения тонкостей построения систем, но, помимо этого, они дают программисту еще один инструмент — возможность выявлять общие компоненты, которые достаточно реализовать однократно.
Глава 1. Введение 27
Если бы мы писали весь необходимый программный код са-мостоятельно, то мы никогда бы ничего не доделали. Более того, у нас едва бы получалось начать. Каждая созданная или создаваемая на сегодня система является результатом тысяч, а то и сотен тысяч человеко-лет работы. Код операционных систем, драйверов принтеров, распределенных баз данных, исполнительных сред контейнеров и их оркестраторов — все, что мы сегодня строим, создается на основе совместно используемых библиотек и повторно используемых компо-
Читать дальше