Сколько шаблонов дизайна у Magento?

Ответы:

37

Magento 1/2 Design Patterns

Часть 1: MVC

Magento использует уникальный шаблон MVC, используя слой конфигурации на основе DOM. Он использует XML для управления конфигурацией и действиями приложения поверх обычной архитектуры Model-View-Controller.

Часть 2: Фронт-контроллер

Magento использует шаблон Front Controller для реализации рабочих процессов для своего приложения. Он имеет единую точку входа (index.php) для всех своих запросов. Посмотрим, как все это работает.

Часть 3: Фабрика

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

Часть 4: Синглтон

Подобно фабричной абстракции классов и группам классов в Magento, шаблон Singleton создается для блоков и классов точно так же.

Часть 5: Реестр

Шаблон реестра - это, в основном, шаблон, позволяющий любому объекту или данным быть доступными в общедоступной глобальной области для любого ресурса.

Часть 6: Прототип

Шаблон Prototype в Magento используется как расширение шаблона Abstract Factory. Это гарантирует, что соответствующий подкласс создается с помощью соответствующих типов, которые назначены объекту. Что это значит? По сути, это означает, что всякий раз, когда вам нужно получить определенный класс, определенный через его родительский тип, шаблон прототипа гарантирует, что вы получите правильный класс, который может обрабатывать то, что вам нужно.

Часть 7: Пул объектов

Шаблон пула объектов сохраняет объекты готовыми к использованию снова и снова, вместо того, чтобы заново создавать их экземпляры и уничтожать их после завершения. Это отличный способ сэкономить на потреблении памяти и вычислительных циклах.

Часть 8. Итератор

Шаблон Iterator - это шаблон проектирования, который позволяет объектам проходить через элементы другого класса. Это позволяет указать итератор и разрешить передачу нескольких различных наборов данных без изменения базовой структуры, которая допускает итерацию.

Часть 9: Ленивая загрузка

Ленивая загрузка - это шаблон проектирования, который задерживает загрузку объекта до момента вызова объекта. С Magento они используют не объекты, а данные.

Часть 10: Сервисный локатор

Локатор сервиса - это шаблон проектирования, который позволяет пользователю получить сервис, инкапсулируя процесс внутри уровня абстракции. Это позволяет пользователю получить соответствующий или лучший сервис, не зная, что это за сервис во время выполнения.

Часть 11: Модуль

Шаблон проектирования модулей - это форма модульного программирования, которая подчеркивает группирование функциональных возможностей программы в независимые, взаимозаменяемые модули.

Часть 12: Наблюдатель

Шаблон наблюдателя - это место, где слушатель события устанавливается в определенной точке во время выполнения приложения. Другие компоненты приложения могут «подключиться» к этому прослушивателю событий и выполнить свой код в этот момент.

Часть 13: Активная запись

Объекты представляют собой представление строки в таблице базы данных. Эти объекты должны иметь свойства, отражающие столбцы, представляющие структуру таблицы, и методы, позволяющие изменять эти свойства в базе данных.

Использование шаблона от Magento

Классы, наследуемые после класса Mage_Core_Model_Abstract, имеют доступ к методам load (), save () и delete (), которые позволяют загружать, изменять, создавать или удалять записи в таблице, с которой связан класс. Кроме того, класс Mage_Core_Model_Abstract наследуется от Varien_Object, что дает нам доступ к по-настоящему волшебным методам __set () и __get (), которые отвечают за автоматическое сопоставление столбцов в таблице базы данных со свойствами данного объекта.

Дополнение Magento 2

КОНТРАКТ ОБСЛУЖИВАНИЯ КОНТРАКТА

Magento - это модульная система, основанная на расширении, которая позволяет стороннему разработчику настраивать и перезаписывать основные части своей платформы. Эти настройки могут привести к нескольким проблемам, например, разработчики смогут отслеживать настройки, выполняемые внешними расширениями. Таким образом, чтобы преодолеть это, Magento предлагает шаблон контракта на обслуживание. Контракт на обслуживание - это набор интерфейсов, которые действуют как уровень между конечным пользователем и бизнес-уровнем. Таким образом, вместо непосредственного предоставления бизнес-логики для настройки конечному пользователю, между ними возникает слой, называемый контрактом на обслуживание.

Сервисные контракты усиливают модульность Magento. Помогает продавцам в простом обновлении Magento. Обеспечьте четко определенный и надежный API, который реализует другой внешний модуль и модуль Magento. Предоставьте простой способ предоставления бизнес-логики через интерфейсы REST или SOAP.

УПРАВЛЕНИЕ ОБЪЕКТАМИ

Сам он состоит из различных шаблонов, таких как: - Внедрение зависимостей, Синглтон, Фабрика, Абстрактная фабрика, Композит, Стратегия, CQRS, Декоратор и многие другие. Мы обсудим некоторые наиболее часто используемые шаблоны среди них. Менеджер объектов играет очень большую роль, Magento запрещает его прямое использование. Диспетчер объектов отвечает за реализацию шаблонов фабрики, синглтона и прокси. Он автоматически создает экземпляр параметра в конструкторах классов. Прежде чем двигаться дальше, давайте разберемся с инъецируемыми и неинъекционными объектами: -

ИНЪЕКЦИОННЫЕ ОБЪЕКТЫ

У них нет собственной идентичности, такой как EventManager, CustomerAccountManagementService.

НЕИНЪЕКЦИОННЫЕ ОБЪЕКТЫ

Например, клиент, продукт и т. Д. Эти объекты обычно имеют свои идентификационные данные и состояние, так как они имеют свои идентификационные данные, важно знать, над каким конкретным экземпляром объекта мы должны работать.

ВНЕДРЕНИЕ ЗАВИСИМОСТИ

Это альтернатива Mage в magento 1. Это концепция введения зависимого объекта через внешнюю среду, а не для его создания внутри. Таким образом, мы будем запрашивать ресурс при создании нашего объекта, а не при необходимости создавать ресурс. Это помогает в будущих модификациях, и тестирование становится очень легким, если имитировать требуемые объекты.

ФАБРИКА ИЛИ ФАБРИКА КЛАССОВ:

В Magento 2 Factory классы создают слой между менеджером объектов и бизнес-кодом. Классы фабрики не должны определяться явно, поскольку они генерируются автоматически. Мы должны создать фабричные классы для неинъекционных объектов.

ПРОКСИ

Прокси-классы используются вместо других классов, а в Magento 2 они иногда используются вместо ресурсоемких классов. Чтобы понять, что делают прокси-классы, давайте посмотрим причину, которая приводит к появлению прокси-классов. Как мы знаем, Magento использует инжекцию конструктора для создания объекта, и когда мы создаем экземпляр объекта, все классы в его конструкторе также будут создаваться, что приводит к цепочке создания экземпляров через конструктор, это может реально замедлить процесс и повлиять на производительность приложения. Таким образом, чтобы остановить создание цепочек, Magento использует прокси-классы.

Давайте посмотрим следующий код: -

Magento\Catalog\Model\Product\Attribute\Source\Status\Proxy

Magento\Catalog\Model\Product\Link\Proxy

Поэтому в приведенном выше коде мы используем прокси-классы для catalogProductStatus и productLink. Когда мы бежим

 php bin/magento setup:di:compile 

Magento создает прокси-классы на лету, используя di.xml с некоторыми фиксированными соглашениями, тем самым заменяя исходный объект объектом прокси-класса. Теперь давайте посмотрим на наш прокси-класс, чтобы понять, как он работает

При создании прокси-сервера следует следующее общее соглашение:

  • Пространство имен прокси-класса будет таким же, как оригинал (Magento \ Каталог \ Модель \ Продукт \ Атрибут \ Источник \ Статус)
  • Прокси-класс расширяет только один объект, т.е. менеджер объектов
  • Имеет магические функции, такие как __sleep, __wake, которые вызываются только при определенных действиях, а функция, такая как __clone, создаст объект исходного класса и предоставит объект только тогда, когда это необходимо (используя ленивый шаблон проектирования загрузки ), таким образом улучшая производительность приложения https://devdocs.magento.com/guides/v2.0/extension-dev-guide/proxies.html

Плагины (Перехватчики)

обзор

Плагин или перехватчик - это класс, который изменяет поведение функций открытого класса путем перехвата вызова функции и выполнения кода до, после или вокруг вызова этой функции. Это позволяет вам заменить или расширить поведение оригинальных, открытых методов для любого класса или интерфейса.

Расширения, которые хотят перехватывать и изменять поведение открытого метода, могут создавать класс плагинов, которые называются плагинами.

Такой подход к перехвату уменьшает конфликты между расширениями, которые изменяют поведение одного и того же класса или метода. Ваша реализация класса Plugin изменяет поведение функции класса, но не меняет сам класс. Поскольку они могут вызываться последовательно в соответствии с настроенным порядком сортировки, эти перехватчики не конфликтуют друг с другом.

Ограничения

Плагины не могут быть использованы ни с одним из следующих:

  • Финальные методы
  • Выпускные занятия
  • Непубличные методы
  • Статические методы
  • __construct
  • Виртуальные типы
  • Объекты, которые создаются перед загрузкой Magento \ Framework \ Interception
  • Объекты, которые не создаются экземпляром ObjectManager (например, напрямую используя new). https://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html

ObjectManager

обзор

Большие приложения, такие как приложение Magento, используют диспетчер объектов, чтобы избежать стандартного кода при составлении объектов во время реализации.

В инфраструктуре Magento реализация ObjectManagerInterface выполняет обязанности менеджера объектов.

обязанности

Менеджер объекта имеет следующие обязанности:

Создание объектов на фабриках и прокси. Реализация одноэлементного шаблона путем возврата того же общего экземпляра класса по запросу. Управление зависимостями путем создания экземпляра предпочтительного класса, когда конструктор запрашивает его интерфейс. Автоматическое создание параметров в конструкторах классов. https://devdocs.magento.com/guides/v2.0/extension-dev-guide/object-manager.html

Евгений Капелько
источник