Проектирование программных продуктов
Основы проектирования архитектуры информационных систем
Архитектура, как основной объект проектирования, нуждается в продуманных и эффективных шаблонах, которые смогут позволить реализовать оптимальные программные продукты, учитывающие все необходимые детали, обеспечивающие ее успешность.
Она определяется наиболее важными и значимыми решениями по поводу структуры программы и взаимодействия модулей в ее предполагаемых рамках. Другими словами, можно сказать, что архитектура состоит из наиболее значимых и определяющих решений, принятых во время процесса проектирования, которые должны обеспечить свойства и характеристики, реализующие основные ожидания пользователей.
Архитектура связана со структурой и взаимодействием модулей и компонентов.
Вместе с определением структурных элементов любая архитектура определяет взаимодействия между этими структурными элементами. Эти взаимодействия должны обеспечивать желаемое поведение системы.
Стоит отметить, что архитектура определяет не все в структуре и в ее поведении. Она занимается только такими элементами, которые оцениваются как значимые на текущий период ее жизненного цикла. Под значимыми элементами понимаются те, которые имеют продолжительное и устойчивое действие– например, главные структурные элементы, связанные с основным поведением и определением значимых свойств, такие как надежность, масштабируемость и пр.
Архитектура не имеет отношения к мелким деталям программных продуктов. Архитектурную значимость можно также назвать экономической значимостью, поскольку главный признак, по которому некоторые элементы оцениваются выше остальных, – это стоимость создания и стоимость изменения.
Архитектура фокусируется только на самых значимых элементах и характеристиках, она предлагает нам конкретную перспективу оцениваемой системы – перспективу, которая наиболее значима для разработчика архитектуры. Именно поэтому шаблоны проектирования, т.е. решения, учитывающие необходимые детали разрабатываемых систем, получают дополнительную значимость, когда речь идет о создании продуктов, поддерживающих заданный уровень качества.
Архитектура – это некое шаблонное обобщение системы, помогающее управлять комплексной сложностью программного продукта.
Набор значимых элементов не является статичным понятием и изменяется во время создания или эксплуатации конкретного программного продукта. Он может меняться при следующих событиях:
- Уточнение результатов разработки требований.
- Идентификация рисков.
- Создание исполняемой программы.
Стабильность разработанной архитектуры, несмотря на возможные изменения требований и условий, в которых она будет эксплуатироваться, в определенной степени является признаком "хорошей" архитектуры, отлаженного процесса разработки, хорошего разработчика. Если архитектура требует постоянного пересмотра при относительно небольших изменениях, это плохой признак. Но необходимо помнить о том, что любая архитектура призвана также обеспечить и уравновесить потребности заинтересованных сторон. Она во многом создается для удовлетворения комплекса потребностей профильных пользователей. Но, с другой стороны, возникают ситуации, когда затруднительно выполнить все выраженные пожелания. В этом случае необходимо задуматься о компромиссе в отношении высказанных требований и ресурсных возможностей для достижения наиболее вероятного результата деятельности.
Аналогично, различные заинтересованные лица могут иметь совершенно разные потребности, и здесь также должно быть достигнуто определенное равновесие. Именно поэтому достижение компромиссных решений является главным аспектом процесса разработки архитектуры, а преодоление трудностей – неотъемлемой чертой каждого успешного архитектора. Кроме всего прочего, важный аспект на пути достижения конечного результата, представленного в виде оптимальной архитектуры, – это ее логическое обоснование. Необходимо обеспечить документирование решений, которые привели к созданию архитектуры. Эта информация является значимой для многих заинтересованных лиц, особенно для тех, кто должен обслуживать систему в дальнейшем. Она часто имеет ценность для разработчика архитектуры, когда ему нужно пересмотреть логические обоснования принятых решений, чтобы избежать ненужного повторения своих действий.
Каждая логически обоснованная архитектура соответствует определенному стилю, который рассматривается как определенный вид шаблона. Архитектурный стиль – система шаблонов, представляющая собой осознанный и синтезированный опыт проектировщика.
Архитектурный стиль определяет набор компонентов и типов звеньев, а также набор условий, в соответствии с которыми они могут соединяться.
Шаблон проектирования– это решение конкретной проблемы/задачи в четко определенном контексте. Применение и использование шаблонов при создании архитектуры позволит сосредоточиться на принятии особо важных решений, определяющих архитектуру и ее успех, а необходимые для реализации детали, их взаимосвязь и количество определяется конкретным шаблоном, выбранным для реализации архитектуры.
Для чего необходимо изучать шаблоны проектирования
После того как мы попытались однозначно и обоснованно донести, что такое шаблоны проектирования и какова их значимость для реализации информационных систем, целесообразно попытаться ответить на вопрос: "Зачем их нужно изучать?".
Среди наиболее популярных предпосылок к изучению шаблонов проектирования и последующему их применению выделяют следующие:
- Возможность многократного использования. Повторное использование решений из уже завершенных успешных проектов позволяет быстро приступить к решению новых проблем и избежать типичных ошибок.
- Применение единой терминологии. Профессиональное общение и работа в группе требует наличия единого базового словаря и единой точки зрения на решаемую задачу. Шаблоны проектирования предоставляют подобную общую точку зрения как на этапе анализа, так и при реализации проекта.
- Шаблоны проектирования предоставляют нам абстрактный высокоуровневый взгляд как на проблему, так и на весь процесс разработки. Это помогает избежать излишней детализации на ранних стадиях проектирования. Одна из основных задач этого курса – привить навык системного мышления в области разработки программных продуктов, который позволит более осознанно подходить к реализации информационных систем.
- Сокращение времени, которое тратится на обсуждение и принятие решения по конкретной информационной системе. После того как удастся достичь применения единой терминологии, существенно сократится время на согласование сложных технических решений.
- Понимание работы "сторонних" инструментов и библиотек. В любом проекте по разработке программного обеспечения используется множество различных "сторонних" решений. Чтобы их использовать правильно и не совершать разнообразных ошибок, группа разработки должна понимать, что как устроено. Именно для этого используются шаблоны проектирования.
Применение шаблонов проектирования в процессах разработки программного обеспечения позволят "увидеть лес за деревьями". Когда удается подняться на более высокий уровень абстракции при обсуждении рабочих вопросов, становятся доступны новые методы проектирования. Именно в этом состоит основное преимущество использования шаблонов проектирования.