Logo: Uran web studio
Сделать сайт в Украине

Шаблон проектирования MVC

Краткая заметка о шаблоне проектирование Model-View-Controller

Шаблон проектирования MVC (Model-View-Controller) – позволяет разделять данные, представление(вид) и обработку действий пользователя на три отдельных компонента:

  1. Модель (model) - модель предоставляет данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать.
  2. Представление, вид (view) - отвечает за отображение информации.
  3. Контроллер (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

Обеспечивает механизм безопасной остановки потоков исполнения, используя общий флаг для сигнализирования прекращения работы потоков

MVC

  • Model-View-Controller (MVC) Модель-представление-контроллер
  • Model-View-Presenter
  • Model-View-View Model
  • Presentation-Abstraction-Control

Enterprise

  • Active Record - способом доступа к данным реляционных баз данных в объектно-ориентированном программировании.
  • Business Delegate
  • Composite Entity/Составная Сущность
  • Composite View
  • DAO (Data Access Object) Объект Доступа к Данным
  • Dispatcher View
  • Front Controller
  • Intercepting Filter
  • Registry
  • Service Activator
  • Service Locator/Локатор Службы
  • Service to Worker
  • Session Facade/Фасад Сессии
  • Transfer Object Assembler
  • Transfer Object/Объект Перемещения
  • Value List Handler/Обработчик Списка Значений
  • View Helper
  • Unit of Work

Прочие

  • Repository/Хранилище


В заметке материал частично заимствован с сайта Википедия


Теги: MVC model-view-controller шаблон проектирования
2013-05-19

И еще полезные примеры JavaScript

Удалить елементы на странице по имени класса

Почему рассылки попадают в спам

вверх