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

Биография автора приведена ранее.

«Что значит имя?», или Как роза превращается в капусту

Сэм Гардинер

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

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

К сожалению, еще не было точно известно, какие Классные Штуки она должна вытворять, поэтому архитекторы не знали, как ее назвать. Им пришлось затеять небольшой конкурс на лучшее имя. В подобный момент вы должны понять, что столкнулись с проблемой: если вы не знаете, как что-то назвать, то вы не знаете, что это такое. А если вы не знаете, что это такое, то вы не сможете сесть и написать программный код.

В нашем конкретном случае быстрый просмотр истории версий исходного кода выявил всю глубину проблемы. Конечно, в нем оказалось множество пустых «реализаций» интерфейсов! Но самое смешное, что даже без нормального кода имена уже менялись трижды. Сначала было выбрано имя ClientAPI (причем под «клиентом» имелся в виду заказчик, а не клиент в контексте модели «клиент-сервер»), а последняя версия называлась ClientBusinessObjects. Воистину замечательное имя: туманное, предельно широкое и сбивающее с толку.

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

Если вы не в состоянии что-либо назвать, то не сможете это и реализовать. Если вы меняете имя уже в третий раз, приостановите свою деятельность и попытайтесь понять, что же вы собираетесь построить.

После продолжительных развлечений с компьютерами (от написания игр на Basic на компьютере ВВС до применения Pascal, Мathematica и LabVIEW для обработки экспериментальных данных, которые хранились в «базе данных» из скрепленных скотчем папок) Сэм Гардинер (Sam Gardiner) перешел к профессиональной разработке ПО. Он работает в сфере программирования на протяжении шести лет.

Четко определенные задачи решаются качественно

Сэм Гардинер

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

Реальная практика программирования представляет собой отнюдь не решение задач, которые дал вам кто-то другой. Конечно, в учебном классе вы должны были решать задачу двоичной сортировки, полученную от преподавателя. Но в реальном мире лучшие архитекторы заняты не решением сложных задач, а поиском для них обходных путей. Их искусство проявляется в умении проложить границы между разнотипными и расплывчатыми задачами, чтобы сделать их четко определенными и автономными.

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

• Внутренняя связность: фрагмент является концептуально цельным, то есть все его задачи, данные и функциональные возможности связаны друг с другом.

• Изолированность: фрагменты концептуально нормализованы, то есть практически не перекрываются друг с другом.

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

Например, реляционная СУБД имеет очень хорошую границу. Она работает практически с любыми данными, которые могут быть преобразованы в поток байтов, обеспечивая структурирование, поиск и выборку этих данных. Все просто.

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

Конечно, код сам по себе должен быть простым и понятным, но при решении хорошо формализованной задачи этого проще добиться благодаря отсутствию всевозможных «исключительных случаев». Аккуратный код хорош прежде всего тем, что его проще тестировать и анализировать, а это естественным образом ведет к весьма высокому качеству реализации. Если у вас нет проблем с кодом, вы сможете направить усилия на то, что обычно остается невидимым для пользователя, например на реализацию надежного механизма передачи сообщений, распределенные транзакции или повышение производительности за счет применения многопоточности (и даже низкоуровневых языков, например, ассемблерных вставок). Так как задача остается неизменной, вы можете сосредоточиться на совершенствовании реализации до того уровня, на котором качество станет отличительной чертой вашей системы.

Стабильность задачи позволяет вам создать систему со стабильным дизайном; стабильность дизайна позволяет создавать приложения высочайшего качества.

Биография автора приведена ранее.

Необходимо усердие

Брайан Харт

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

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

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

Кроме того, быть усердным означает для архитектора преуспеть в обманчиво простом деле принятия и выполнения обязательств. Такие обязательства часто оказываются весьма разнородными и охватывают широкий диапазон ограничений и ожиданий. Примеры:

• Соблюдение финансовых и временных ограничений заказчика.

• Выполнение всей работы, которая делает архитектора эффективным (а не только той, которая ему нравится).

• Использование конкретных процессов/методологий.

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