Популярные среди любителей программирования на Java и C++ типовые проекты еще не стали злободневной темой для программистов, работающих с PHP. Однако они представляют собой довольно важную часть вычислительной науки. Более того, они применимы ко всем языкам программирования.
Истоки типового проектирования берут свое начало в работе Кристофера Алек-сандера (Christopher Alexander). Там они рассматривались применительно к гражданскому строительству. Однако такой подход применим к любой проектной деятельности, и прошло совсем немного времени, как она вдохновила компьютерщиков на новые свершения. Первая популярная книга по типовому проектированию программных систем - это книга Design Patterns: Elements of Reusable Object-Oriented Software авторского коллектива, в который входят Эрих Грамм (Erich Gamma), Ричард Хелм (Richard Helm), Ральф Джонсон (Ralph Johnson) и Джон Влиссидес (John Vlissides). Эту компанию в среде программистов обычно называют "бандой четырех".
29.1. Определение типовых проектов
Интуитивно можно распознать шаблонные решения при программировании почти каждой строчки программного кода. Так, например, работая с массивом, вы уже знаете, каким образом будете обрабатывать его в цикле, т.е. уже даже подсознательно пользуетесь своеобразными типовым проектом. Как только в PHP появился оператор foreach, он стал любимцем многих разработчиков.
С более общей точки зрения мы сталкиваемся с обычной проблемой, заключающейся в распределении функциональности в сценариях PHP. Большинство проектов требует разделения функциональности по отдельным модулям. Обычный информационный Web-узел только выигрывает от применения простейшей схемы, использующей заголовки и колонтитулы, которые включены в сценарий с помощью оператора include или require. . В обоих случаях возникают проблемы, требующие решения, и их стандартные решения. Условия определяют проблему, имеющую известное решение. Более того, после нескольких решений проблемы вы уже будете иметь достаточно четкое понятие о побочных эффектах этого решения.
Формальное определение типового решения включает название проблемы, ее описание и решение, а также какие результаты оно дает. Название упрощает ссылку на типовой проект. Описание проблемы определяет конкретный набор условий, к которым имеет отношение данный шаблон. Решение описывает наилучшую общую стратегию решения проблемы. Наконец, шаблон описывает любые последствия его применения.
Типовые решения не являются предметом новой разработки, и для них не требуется использование новых возможностей. Они представляют тщательное усовершенствование на основании имеющегося опыта и имеют тенденцию к оптимизации использования, а не эффективности. Совершенно естественно, что решение, оптимизированное по быстродействию, извлекает максимальную выгоду из конкретной ситуации и поэтому не очень подходит для решений в обоих случаях. Например, если нам нужно получить сумму трех чисел, то это можно сделать с помощью одной строки кода. Но такое решение неприменимо для получения суммы 10000 чисел, так как в этом случае необходим перебор всех значений в цикле.
Несмотря на то что типовые проекты берут свое начало в гражданском строительстве, в применении к программированию они непосредственно привязаны к объектно-ориентированному проектированию. ООП нацелено на создание обобщенных программных модулей, которые называются объектами. Типовое проектирование призвано выполнять обобщенные решения для обычных задач.
До появления PHP 5 у программистов, работающих с PHP, эффективное применение типовых проектов в PHP считалось сложной задачей. Благодаря PHP 5, в котором была впервые применена объектная модель, облегчилось применение типовых проектов и стали основным ингредиентом в разработке объектно-ориентированных PHP-приложений.
Использование типовых проектов при написании кодов дает два преимущества. Во-первых, не надо искать решение, как только вы поняли, что эта проблема уже соответствует уже однажды решенной проблеме. Во-вторых, нет необходимости анализировать последствия применения типового проекта и тратить время на оптимизацию сделанной программы.
Вместо того чтобы принимать решение, потребуется всего лишь определить, с какой проблемой вы столкнулись. Если для проблемы уже имеется приемлемое типовое решение, то вы сможете, не вдаваясь в подробности проектирования, перейти непосредственно к ее реализации.