Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Шаблоны программирования в CMS Magento

Практика



Паттерны проектирования – одна из первых тем, которую мы рассмотрим. Многие разработчики забывают о них при построении своих приложений. Паттерны по сути не дают готовое решение задачи, но зато их используют как основу для понимания и осмысливания многих «шаблонных ситуаций» при написании кода.

В Magento паттерны — фундаментальная основа, что выводит ее на уровень выше с конкурирующими платформами. Здесь все доступно уже из коробки и даже многое уже реализовано, остается только знать где это нужно и как оно работает. Разберем коротко, где и как скрыты основные паттерны в Magento.

 

 

Модель Представление Контроллер (Model View Controller)

Модель-представление-контроллер, кратко MVC – это шаблон проектирования, в котором бизнес-процессы, представление и соединяемая логика разделены.

Magento активно использует XML как шаблонную логику и смешанный HTML с PHP-файлами для ее применения. Все модели основываются на Varien’s ORM.

Большая часть бизнес-логики реализована в моделях (model), которая через контроллеры (controller) выводится в представления (view).

 

 

Фронтенд-контроллера (Frontend Controller)

Этот шаблон позаботится о том, чтобы была одна и только одна точка для входа (в Magento это файл index.php). Все запросы отслеживаются и направляются в назначенный контроллер, затем обрабатываются в соответствии со спецификацией. Фронтенд-контроллер (Mage::app()) отвечает за инициализацию среды и маршрутизацию запросов до указанных контроллеров.

 

 

Фабрика (Factory)

Как следует из названия, этот паттерн использует разложение класса на составляющие подклассы с инстанцированием (созданием экземпляра объекта). Он широко задействован в нативном коде Magento и автозагрузки ядра системы. Путем назначения псевдонимов в файле config.xml мы позволяем фабрике узнать где искать нужные классы.

Существуют разные вспомогательные фабричные методы в Mage-Core-классе (например, getModel()). Они принимают псевдоним класса и потом будут возвращать его экземпляр.

Вместо того, чтобы использовать при подключении вызовы include, разбросанные по ядру системы, фабричный паттерн собирает все в один глобальный класс.

 

 

Прототип (Prototype)

Где заканчивает свою работу паттерн Фабрики, там продолжает работать паттерн Прототип. Он определяет, могут ли экземпляры классов извлечь определенные данные из экземпляра

другого класса в зависимости от его родительского класса (прототипа). Ярким примером может служить клас Mage_Catalog_Model_Product, который имеет метод getTypeInstance

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

 

 

Модуль (Module)

Каждый, кто детально знакомится с разработкой на CMS Magento, рано или поздно сталкивается с паттерном Модуль. Он определяет как разные домены группируются в отдельные модули таким образом, что не мешают для функционирования один другому и могут использовать функционал для работы из директории с модулями (scope) основной системы. Но, хотя мажента опирается на модульную структуру, ее реализация внутри ядра платформы немодульна “до костей”. Определенная функциональность сильно привязана к центру системы и не может быть легко изменена. Примером может послужить тот же супер-глобальный Mage-класс, который вводит  разные общесистемные зависимости. Эти зависимости трудно контролировать.

 

 

Одиночка (Singleton)

Еще одним способом получить экземпляр класса является вызов метода Mage::getSingleton(). Он принимает псевдоним класса и до возвращения экземпляра проверяет внутренний реестр на наличие такого при инстанцировании. Примером применения служит хранилище сеанса, которое должно существовать только в одном экземпляре.

 

 

Реестр (Registry)

Все одиночные экземпляры хранятся во внутреннем реестре: такой себе глобальный scope-контейнер для размещаемых данных. Но он не только для внутреннего (закрытого) использования. Мы можем свободно брать из него необходимые данные для своих нужд.

Методы Mage::register($key, $value), ::registry($key) и ::unregister($key) могут быть соответственно использованы для хранения, извлечения и удаления данных.

Паттерн реестра часто применяется для передачи данных между разными scope (директориями для кода). В Magento их три:  core, community, local.

 

 

Слушатель (Observer)

Magento в его событийно-ориентированной архитектуре широко применяет шаблон Observer. По определению наблюдателей (или слушателей), дополнительный код может быть повешен на специальное событие-слушатель, которое вызывается в качестве наблюдаемого события. Magento использует свое XML-хранилище данных, чтобы определить наблюдателей. Если событие вызывается в виде: Mage::dispatchEvent ($eventName, $data), хранилище данных Magento будет извещено и соответствующие наблюдатели запустят свои события ($event).

 

Выше описана лишь часть из основных паттернов, которые задействованы в Magento. Некоторые из них претерпели изменения по сравнению с классическим представлением шаблонов. Но это хорошо, потому что паттерны проектирования существуют лишь для того, чтобы помочь разработчикам в понимании общей идеи вместо развертывания дословной реализации.

создано: 2018-10-26
обновлено: 2021-03-13
360



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)