Краткая заметка о шаблоне проектирование Model-View-Controller
Шаблон проектирования MVC (Model-View-Controller) – позволяет разделять данные, представление(вид) и обработку действий пользователя на три отдельных компонента:
Основное назначение: разделение бизнес-логики и представления(вида). За счет этого сводится к минимуму повторное использование кода.
Шаблон (или паттерн, кому как больше нравиться называть) был впервые описан в конце 70-х годов.
Схема работы шаблона представлена на следующей схеме:
В такой структуре, изменения, вносимые в один из компонентов, оказывают минимально возможное воздействие на другие компоненты.
На данном шаблоне основаны многие из современных популярных PHP фреймворков, примеры: Yiiframework, Zend Framework, CakePHP
Существует множество других шаблонов проектирования.
Название |
Оригинальное название |
Описание |
Шаблон делегирования |
Delegation pattern |
Объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту |
Шаблон функционального дизайна |
Functional design |
Гарантирует, что каждый модуль компьютерной программы имеет только одну обязанность и исполняет её с минимумом побочных эффектов на другие части программы |
Неизменяемый объект |
Immutable |
Объект, который не может быть изменён после своего создания |
Интерфейс |
Interface |
Общий метод для структурирования компьютерных программ для того, чтобы их было проще понять |
Marker interface |
Marker interface |
|
Property Container |
Property Container |
Функция данного шаблона - обеспечить динамическую расширяемость уже готового приложения. |
Event Channel |
Event Channel |
|
Абстрактная фабрика |
Abstract factory |
Класс, который представляет собой интерфейс для создания компонентов системы. |
Строитель |
Builder |
Класс, который представляет собой интерфейс для создания сложного объекта |
Фабричный метод |
Factory method |
Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанциировать |
Отложенная инициализация |
Lazy initialization |
Объект, инициализируемый во время первого обращения к нему |
Пул одиночек |
Multiton |
Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобальную точку доступа к ним |
Объектный пул |
Object pool |
Класс, который представляет собой интерфейс для работы с набором инициализированных и готовых к использованию объектов |
Прототип |
Prototype |
Определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор |
Получение ресурса есть инициализация |
Resource acquisition is initialization (RAII) |
Получение некоторого ресурса совмещается с инициализацией, а освобождение — с уничтожением объекта |
Одиночка |
Singleton |
Класс, который может иметь только один экземпляр. |
Адаптер |
Adapter / Wrapper |
Объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс |
Мост |
Bridge |
Структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо |
Компоновщик |
Composite |
Объект, который объединяет в себе объекты, подобные ему самому |
Декоратор или Wrapper/Обёртка |
Decorator |
Класс, расширяющий функциональность другого класса без использования наследования |
Фасад |
Facade |
Объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое |
Единая точка входа |
Front Controller |
Обеспечивает унифицированный интерфейс для интерфейсов в подсистеме. Front Controller определяет высокоуровневый интерфейс, упрощающий использование подсистемы |
Приспособленец |
Flyweight |
Это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым |
Заместитель |
Proxy |
Объект, который является посредником между двумя другими объектами, и который реализовывает/ограничивает доступ к объекту, к которому обращаются через него |
Цепочка ответственности |
Chain of responsibility |
Предназначен для организации в системе уровней ответственности |
Команда, Action, Transaction |
Command |
Представляет действие. Объект команды заключает в себе само действие и его параметры |
Интерпретатор |
Interpreter |
Решает часто встречающуюся, но подверженную изменениям, задачу |
Итератор, Cursor |
Iterator |
Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящий в состав агрегации |
Посредник |
Mediator |
Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга |
Хранитель, Token |
Memento |
Позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутреннее состояния объекта так, чтобы позднее восстановить его в этом состоянии |
Null object |
Предотвращает нулевые указатели, предоставляя объект «по умолчанию» |
|
Наблюдатель, Dependents, Publish-Subscribe, Listener |
Observer или Publish/subscribe |
Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии |
Слуга |
Servant |
Используется для обеспечения общей функциональности группе классов |
Specification |
Служит для связывания бизнес-логики |
|
Состояние, Objects for States |
State |
Используется в тех случаях, когда во время выполнения программы объект должен менять свое поведение в зависимости от своего состояния |
Стратегия |
Strategy |
Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости |
Шаблонный метод |
Template method |
Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом. |
Посетитель |
Visitor |
Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы. |
Simple Policy |
||
Event listener |
||
Single-serving visitor |
Single-serving visitor |
Оптимизирует реализацию шаблона посетитель, который инициализируется, единожды используется, и затем удаляется |
Hierarchical visitor |
Hierarchical visitor |
Предоставляет способ обхода всех вершин иерархической структуры данных (напр. древовидной) |
Шаблоны параллельного программирования (Concurrency)
Используются для более эффективного написания многопоточных программ, и предоставляет готовые решения проблем синхронизации.
Название |
Оригинальное название |
Описание |
Active Object |
Active object |
Служит для отделения потока выполнения метода от потока, в котором он был вызван. Использует шаблоны асинхронный вызов методов и планировщик |
Balking |
Balking |
Служит для выполнения действия над объектом только тогда, когда тот находится в корректном состоянии |
Binding Properties |
Комбинирует несколько наблюдателей для обеспечения синхронизации свойств в различных объектах |
|
Обмен сообщениями |
Messaging design pattern (MDP) |
Позволяет компонентам и приложениям обмениваться информацией (сообщениями) |
Блокировка с двойной проверкой |
Double-checked locking |
Предназначен для уменьшения накладных расходов, связанных с получением блокировки |
Event-based asynchronous |
Адресные проблемы с Асинхронным паттерном которые возникают в программах с несколькими потоками. |
|
Guarded suspension |
Guarded suspension |
Используется для блокировки выполнения действия над объектом только тогда, когда тот находится в корректном состоянии |
Half-Sync/Half-Async |
||
Leaders/followers |
||
Lock |
Один поток блокирует ресурс для предотвращения доступа или изменения его другими потоками |
|
Монитор |
Monitor object |
Объект, предназначенный для безопасного использования более чем одним потоком |
Reactor |
Reactor |
Предназначен для синхронной передачи запросов сервису от одного или нескольких источников |
Read write lock |
Read-write lock |
Позволяет нескольким потокам одновременно считывать информацию из общего хранилища, но позволяя только одному потоку в момент времени изменять её |
Планировщик |
Scheduler |
Обеспечивает механизм реализации политики планирования, но при этом не зависящих ни от одной конкретной политики |
Thread pool |
Thread pool |
Предоставляет пул потоков для обработки заданий, представленных обычно в виде очереди |
Thread-Specific Storage |
Thread-specific storage |
Служит для предоставления различных глобальных переменных для разных потоков |
Однопоточное выполнение |
Single Thread Execution |
Препятствует конкурентному вызову метода, тем самым запрещая параллельное выполнение этого метода |
Кооперативный паттерн |
Cooperative pattern |
Обеспечивает механизм безопасной остановки потоков исполнения, используя общий флаг для сигнализирования прекращения работы потоков |
В заметке материал частично заимствован с сайта Википедия