Есть множество способов структурировать и проектировать код веб приложения и вы можете приложить максимум усилий или немного подумать, чтобы понять какая вам нравиться архитектура. В любом случае это хорошая идея использовать общие шаблоны проектирования, потому что это делает код для других более понятным и легко используемым.
Этот шаблон является одним из часто используемых. В нём класс просто создаёт объект, который вам необходим. Рассмотрим следующий пример шаблон фабрики:
Этот код создаст объект “Автомобиль”, используя фабрику. Сделав так вы получите два преимущества: во-первых, если вам в дальнейшем нужно изменить, переименовать или заменить класс Automobile, то вы легко это сделаете, просто изменив код в фабрике AutomobileFactory, вместо того, чтобы менять его во всех местах проекта, которые используют класс Automobile; во-вторых, если вам нужно при создании объекта выполнять какие-то операции с этим объектом, то вы можете описать эти операции в фабрике, вместо того чтобы каждый раз их описывать при создании нового объекта.
Использовать шаблон Фабрика не всегда необходимо (или слишком мудро). В примере, что выше код настолько прост, что использование фабрики добавляет не нужную сложность. Однако если вы делаете довольно большой и сложный проект, то использование шаблона Фабрика позволит вам избежать многих хлопот.
При создании веб приложения, часто требуется концептуально и архитектурно предоставить доступ только к одному экземпляру определённого класса. Шаблон Одиночка позволяет это сделать.
Этот код реализует данный шаблон, используя статические переменные
и статический метод getInstance()
.
Обратите внимание на следующее:
__construct
сделан защищённым (protected), чтобы запретить создание нового объекта с помощью оператора new
.__clone
определён как частный (private),
чтобы предотвратить клонирование экземпляра класса с помощью clone
.__wakeup
определён как частный (private),
чтобы предотвратить десериализации экземпляра класса через глобальную функцию
\unserialize()
.getInstance()
с ключевым словом static
. This allows the subclassing of the class Singleton
in the example.Шаблон Одиночка полезен тогда, когда нужно быть уверенным, что экземпляр класса только один во жизненном цикле запроса для веб приложения. Обычно это происходит, когда имеется глобальный объект (например Configuration класс) или общий ресурс (например очередь событий).
Вы должны быть осторожными, используя этот шаблон, поскольку по своей природе он вводит глобальное утверждение экземпляра в приложении, понижая тем самым тестируемость. В большинстве случаев внедрение зависимостей могут (должны) использоваться вместо Singleton класса. Используя внедрение зависимости, означает, что мы не вводим ненужных соединений в дизайн наших приложения, а объект, используя общий или глобальный ресурс, не требует знания конкретного класса.
Шаблон Фронт-контроллер использует единую точку входа для приложения (например, index.php), которая обрабатывает все запросы. Код этого шаблона отвечает за загрузку всех зависимостей, обработку и отправку запроса в браузере. Фронт-контроллер может быть полезным, поскольку способствует модульному коду и предоставляет центральное место, в которое можно внедрить код для каждого запроса (например, санитарная обработка входных данных).
Модель-представление-контроллер (далее MVC) шаблон из то же серии, что и HMVC, MVVM. MVC позволяет разбить код приложения на логические объекты, которые предназначены для под конкретные задачи. Модель служит как слой к доступу данных и возвращает их в том формате, который необходим приложению. Контроллеры обрабатывают запросы, обрабатывают данные, полученные из модели, и загружают представления, посылая в него ответ. Представления содержат шаблоны (markup, xml и другие), которые отправляются в браузер.
MVC является наиболее распространенным архитектурным шаблоном, который используется в популярных PHP фреймворков.
Больше информации по подобным шаблонам вы можете подчеркнуть в следующих ссылках: