• Главная цель состоит в том, что изменения должны затрагивать как можно меньше
компонент. Даже принципиальные новшества во внешнем виде или
функционировании приложения должны затронуть один или два фрагмента кода.
• Старайтесь предсказать наиболее вероятные источники изменений и позвольте им
влиять на возможно меньшее количество компонент программы. Наиболее общими
причинами изменений являются интерфейс, форматы обмена информацией, вид
выходных данных.
• Старайтесь изолировать и уменьшить зависимость программного обеспечения от
аппаратуры. Например, интерфейс просмотра рецептов в вашем приложении может
частично зависеть от аппаратного обеспечения системы, на которой работает
программа. Последующие версии должны переноситься на различные платформы.
Хороший проект должен предвидеть подобное изменение.
• Уменьшение количества связей между фрагментами программы снижает
взаимозависимость между ними и увеличивает вероятность того, что каждую
компоненту удастся изменить с минимальным воздействием на другие.
• Аккуратно заносите записи о процессе разработке и о дискуссиях, проводившихся
вокруг принципиальных решений, в проектную документацию. Почти наверняка
коллектив, отвечающий за сопровождение системы и разработку следующих
версий, будет отличаться от команды, разработавшей первоначальную версию
программы. Проектная документация позволит в последствии узнать о мотивах
принятых решений и поможет избежать затрат времени на обсуждение вопросов,
которые уже были разрешены.
2.6.3. Продолжение работы со сценарием
Каждый кулинарный рецепт будет идентифицироваться с конкретной программной
компонентой. Если рецепт выбран пользователем, управление передается объекту,
ассоциированному с рецептом. Рецепт должен содержать определенную информацию. В
основном она состоит из списка ингредиентов и действий, необходимых для
трансформации составляющих в конечный продукт. Согласно нашему сценарию
компонента-рецепт должна также выполнять и другие действия. Например, она будет
отображать рецепт на экране. Пользователь получит возможность снабжать рецепт
аннотацией, а также менять список ингредиентов или набор инструкций. С другой
стороны, пользователь может потребовать распечатать рецепт. Все эти действия являются
обязанностью компоненты Recipe. (Временно мы продолжим описание Recipe как
отдельно взятого объекта. На этапе проектирования мы можем рассматривать его как
прототип многочисленных объектов-рецептов. Позднее мы вернемся к обсуждению
альтернативы «одиночная компонента — множество компонент».)
Определив вчерне, как осуществить просмотр базы данных, вернемся к ее блоку
управления и предположим, что пользователь хочет добавить новый рецепт. В блоке
управления базой данных неким образом определяется, в какой раздел поместить новый
рецепт (в настоящее время детали нас не интересуют), запрашивается имя рецепта и
выводится окно для набора текста. Таким образом, эту задачу естественно отнести к той
компоненте, которая отвечает за редактирование рецептов.
Вернемся к блоку Greeter. Планирование меню, как вы помните, было поручено
программной компоненте Plan Manager. Пользователь должен иметь возможность
сохранить существующий план. Следовательно, компонента Plan Manager может
запускаться либо в результате открытия уже существующего плана, либо при создании
нового. В последнем случае пользователя необходимо попросить ввести временные
интервалы (список дат) для нового плана. Каждая дата ассоциируется с отдельной
PDF created with pdfFactory Pro trial version www.pdffactory.com