Казахстан, Караганды, Карагандинский экономический университет, 2009 |
Введение в аналитические шаблоны и стили проектирования
Классификация используемых шаблонов проектирования
Шаблоны проектирования, о которых пойдет речь далее, классифицируются по различным параметрам. К примеру, можно упомянуть следующие: уровень сложности, детализация, охват проектируемого функционала, способ взаимосвязи "дочерних компонентов" и пр.
Практически все паттерны можно реализовать на любом языке программирования. Факторами, которые помогут правильным образом выбрать шаблон для конкретной рабочей ситуации, являются структура, функциональность и способ взаимодействия компонентов различного уровня программного продукта. Анализ и синтез требований, предъявляемых для данных характеристик информационных систем, будет способствовать определению наиболее успешного шаблона проектирования.
Предложенная ниже классификация основана на анализе и синтезе богатого практического опыта применения паттернов проектирования. Она во многом соответствует классификациям, предлагаемым в авторитетных отечественных и зарубежных источниках, и подкреплена большим статистическим массивом использования шаблонов:
- Архитектурные шаблоны:
- структурные;
- централизованного управления;
- управления по событиям;
- взаимодействия с базой данных.
- Интеграционные шаблоны:
- структурные;
- по методу интеграции;
- по типу обмена данными.
- Структурные шаблоны.
- Поведенческие шаблоны.
- Порождающие шаблоны.
Далее, по ходу книги, мы будем придерживаться предложенной классификации. Данная классификация предлагает сначала изучение наиболее значимых, с практической точки зрения, для внедрения и поддержки программных продуктов шаблонов проектирования, которые являются базисом любой информационной системы. К ним относятся архитектурные шаблоны проектирования. Затем идут наиболее востребованные на сегодня с точки зрения применения интеграционные шаблоны. В последующих главах будут представлены паттерны, которые описывают самые базовые принципы организации эффективной функциональности программных продуктов.
Выводы
Приступая к работе над архитектурой приложения, необходимо помнить об основных принципах проектирования. Это поможет создать архитектуру, которая будет следовать проверенным подходам, обеспечит минимизацию затрат, простоту обслуживания, удобство использования и расширяемость.
К подобным архитектурам относятся те, которые отвечают следующим принципам:
- Разделение функций. Разделение приложений на отдельные компоненты с минимальным "перекрытием" используемой общей функциональности.
Важным фактором, который поможет созданию гибких приложений, является предельное уменьшение количества точек соприкосновения. Неверное разграничение может привести к высокой связанности и сложностям взаимодействия, даже несмотря на слабое перекрытие функциональности отдельных компонентов.
- Принцип единственности ответственности.
Каждый отдельно взятый компонент или модуль должен отвечать только за одно конкретное свойство/функцию или их совокупность.
- Принцип минимального знания.
Компоненту или объекту не должны быть известны внутренние детали других компонентов или объектов.
- Не повторяйтесь. Намерение должно быть обозначено только один раз.
В применении к проектированию приложения это означает, что определенная функциональность должна быть реализована только в одном компоненте и не должна дублироваться ни в одном другом компоненте.
- Минимизируйте проектирование наперед.YAGNI ("You ain’t gonna need it").
Проектируйте только то, что необходимо. В некоторых случаях, когда стоимость разработки или издержки в случае неудачного дизайна очень высоки, может потребоваться полное предварительное проектирование и тестирование. В других случаях, особенно при гибкой разработке, можно избежать масштабного проектирования наперед. Если требования к приложению четко не определены или существует вероятность изменения дизайна со временем, старайтесь не тратить много сил на проектирование раньше времени.
За счет использования шаблонов можно добиться следующих результатов, необходимых в ходе процессов разработки программного обеспечения для создания эффективных корпоративных информационных систем:
- Многократное применение высококачественного решения для повторяющихся бизнес-задач.
- Предсказуемый стиль создаваемого продукта, с минимизацией затрат на его дальнейшую поддержку и развитие.
- Общая терминология для установки единого бизнес-технического глоссария и расширения взаимопонимания в пределах группы разработки.
- Более высокий уровень реализации задач и минимизация нежелательного углубления в детали реализации на ранних стадиях разработки.
- Ускорение профессионального развития как всей группы в целом,так и отдельных ее членов.
- Повышение универсальности создаваемого кода приложений.
- Обеспечение набора альтернатив возможных реализаций, в зависимости от бизнес-требований к продукту.