Литмир - Электронная Библиотека
Содержание  
A
A

Делясь обретенными знаниями и опытом, мы способствуем движению нашей отрасли вперед; мы сознаем, что это также помогает нам лучше понимать происходящее и исправлять ошибки. С учетом того, в каком состоянии пребывает значительная часть наших программ, очень важно использовать любую возможность рассказать другим о том, что мы поняли, узнали или полагаем, что узнали. Если мы поможем тем, кто нас окружает, стать лучше, они помогут нам в полной мере раскрыть наш потенциал.

Пол У. Хомер (Paul W. Homer) — программист, писатель и фотограф-любитель. Занялся разработкой программного обеспечения несколько десятилетий назад и с тех пор неустанно работает над построением все более сложных систем.

Патология шаблонов

Чед Лавинь

97 этюдов для архитекторов программных систем - i_035.jpg

Шаблоны проектирования — один из самых полезных инструментов в арсенале архитектора программного обеспечения. Использование шаблонов позволяет создавать типовые решения, которые проще понять и объяснить другим. Сама идея шаблонов напрямую ассоциируется с качественным проектированием. Из-за этого у нас часто возникает соблазн продемонстрировать свою искушенность, включив в проект большое количество шаблонов. Если вы поймали себя на том, что упорно втискиваете свои любимые шаблоны в пространство задачи, где они неуместны, то не исключено, что вы стали жертвой патологии шаблонов.

Многие проекты страдают от такого положения дел. Глядя на них, так и видишь, как архитектор проекта поднимает взгляд от последней страницы сборника шаблонов, потирает руки и произносит: «Так, с какого шаблона начнем?..». Этот образ действий отчасти сродни подходу разработчика, начинающего писать класс с мысли: «Хм, от какого бы класса мне унаследовать?..». Шаблоны проектирования — отличный инструмент снижения неотъемлемой сложности, но, как и любой другой инструмент, его можно использовать неправильно. Есть известная пословица: «Человек с молотком везде видит гвозди»; когда в роли такого молотка оказываются шаблоны проектирования, проблемы неизбежны. Следите за тем, чтобы ваша любовь к шаблонам не превратилась в манию, которая приведет к реализации более сложных решений, чем это действительно необходимо.

Шаблоны — не панацея, а их использование не всегда служит признаком хорошего дизайна. Они представляют собой всего лишь повторно применимые решения типичных задач, найденные и описанные другими разработчиками, чтобы нам было легче узнать «уже изобретенный велосипед», если он попадется нам на глаза. Наша задача — выявить те проблемы, для которых создавались эти решения, и правильно применить подходящий шаблон проектирования. Не позволяйте своему желанию продемонстрировать мастерское владение шаблонами проектирования взять верх над прагматизмом. Направьте свои усилия на проектирование систем, обеспечивающих эффективное решение бизнес-задач, и используйте шаблоны для решения тех проблем, для которых они предназначены.

Чед Лавинь (Chad. LaVigne) — архитектор программных решений и внештатный технический специалист фирмы TEKSystems, Inc. (Балтимор). Работает в основном в Миннеаполисе, занимается проектированием и реализацией решений на базе технологий Enterprise Java.

Не увлекайтесь архитектурными метафорами

Дэвид Инг

97 этюдов для архитекторов программных систем - i_036.jpg

Архитекторы обожают иметь дело с метафорами. Метафоры позволяют придать осязаемость абстрактным, сложным и ускользающим от понимания темам. При общении с другими членами команды или в процессе обсуждения архитектуры с конечным пользователем возникает неодолимый соблазн подобрать выразительную, хорошо знакомую по реальному миру метафору, которая описала бы то, что вы пытаетесь построить.

Обычно все начинается хорошо: собеседники находят общий язык, и кажется, что все идет в нужном направлении. Метафора развивается и растет до тех пор, пока не начинает жить собственной жизнью. Люди относятся к ней благосклонно — прогресс налицо!

А затем обычно наступает момент, когда архитектурная метафора вдруг становится опасной и восстает против своих создателей. Вот как это может происходить:

• Ваша метафора начинает нравиться заказчику больше, чем сама разрабатываемая система, то есть все заинтересованные стороны начинают верить в красивую иллюзию, созданную метафорой, не желая разбираться, что за ней на самом деле скрывается.

Пример: «Мы строим транспортную систему по принципу перемещения корабля между несколькими причалами».

Вы представляете себе контейнеровоз, бороздящий просторы Тихого океана, — я же имел в виду гребную лодку в бассейне, притом с одним веслом.

• Команда разработчиков начинает считать метафору более весомой по сравнению с реальной бизнес-задачей. А вы из любви к своей метафоре начинаете оправдывать странные решения.

Пример: «Мы сказали, что система будет похожа на картотечный шкаф, поэтому нам придется выводить данные в алфавитном порядке. Я знаю, что этот шкаф имеет шесть измерений, бесконечную длину и встроенные часы, но мы уже сделали иконку — а картотека должна вести себя как картотека…».

• В системе попадаются названия из старых, давно забытых метафор — археологические реликты концепций, давно отправленных в утиль.

Пример: «А почему объект Billing Factory[34] создает Port Channel для системы Rowing boat?.. И он в самом деле должен возвращать для Hub Bus представление Pomegranate?.. Ну да, я действительно работаю здесь недавно, а что?»

Итак, не влюбляйтесь в метафору, представляющую вашу систему, используйте ее в целях исследований и разъяснения, но не попадайте под ее влияние.

Дэвид Инг (David Ing) — архитектор программного обеспечения, живущий и работающий в Ванкувере. Родился в Великобритании, но переехал подальше от дождей (хотя сейчас считает, что был обманут лживой литературой для туристов). Подчиняясь требованиям моды, сейчас Дэвид работает в компании Taglocity, специализирующейся на Web 2.0; здесь он пытается привести системы электронной почты «к цивилизованному виду», а заодно понять, что же такое Web 2.0.

Уделяйте пристальное внимание поддержке и сопровождению

Мнчедизи Каспер

97 этюдов для архитекторов программных систем - i_037.jpg

Поддержка и сопровождение приложений никогда и ни при каких обстоятельствах не должны отходить на второй план. Поскольку более 80 % жизненного цикла приложения занимает стадия сопровождения, вы должны уже на стадии проектирования обратить пристальное внимание на проблемы поддержки и сопровождения. Стоит вам забыть об этом, и вскоре вы с ужасом будете взирать на то, как ваше приложение превращается из мечты архитектора в нечто отвратительное, гибнет в конвульсиях и навечно остается в памяти людей как ваша неудача.

В ходе проектирования приложения перед внутренним взором архитекторов находятся главным образом разработчики, вооруженные интегрированными средами и отладчиками. Если что-то идет не так, искусные программисты переключаются в режим отладки и находят ошибку. Такая картина вполне естественна, поскольку большинство архитекторов основную часть своей жизни проводят в роли разработчиков, а не администраторов системы. К сожалению, разработчик и специалист службы поддержки обладают разными навыками — аналогично тому, как среда разработки/тестирования и рабочая среда (production environment) служат разным целям.

Вот примеры проблем, с которыми сталкивается администратор системы:

• Администратор не может заново отправить запрос, чтобы воспроизвести проблему. В рабочей среде вы не можете выполнить финансовую транзакцию в «боевой» базе данных, чтобы просто посмотреть, где произошла ошибка.

вернуться

34

Billing Factory — фабрика счетов («Фабрика» — один из шаблонов проектирования); port channel — агрегирование каналов (технология, позволяющая объединить несколько физических каналов в один логический, в данном случае — отвечающий за это программный объект); rowing boat — гребная лодка; hub bus — концентратор шины; pomegranate — гранат. (Поскольку программные объекты обычно имеют английские названия, то в российской компании подобный разговор происходил бы именно так — на смеси русского и английского. Поэтому мы сочли правильным привести переводы и дать пояснения в сноске, а не напрямую в тексте.) — Примеч. ред.

25
{"b":"838772","o":1}