Есть ли в Magento 2 конкретный пример чего-то, что построено с использованием концепции сервисного контракта ? Я часто встречал этот термин, но, глядя на Magento 2 в том виде, в каком он существует сейчас, мне не ясно, являются ли контракты на обслуживание более руководящими принципами или они действительно связаны с конкретными реализациями вещей в Magento 2.
magento2
service-contract
Алан Сторм
источник
источник
Ответы:
Насколько я понимаю, все интерфейсы, определенные в папке Api, являются контрактами на обслуживание. Таким образом, везде, где используется интерфейс вместо фактической реализации класса, он использует контракт на обслуживание.
Примером может служить реализация этого плагина здесь https://github.com/magento/magento2/blob/2.3.2/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php#L78
Оно использует
вместо того
\Magento\Sales\Model\Order
источник
Сервисы (также называемые сервисными контрактами) являются одним из наших основных шаблонов разработки в Magento 2, чтобы обеспечить стабильные интерфейсы для легкой настройки / расширения. Они принимают 2 формы в базе кода (обе помечены с
@api
помощью класса или методов класса, чтобы идентифицировать их как стабильные интерфейсы, которые можно настроить и представить в виде веб-API): API или SPI. API-интерфейсы определены в папке API и принимают две формы - полностью переработанный сервис и только модуль только API.Полностью реорганизованные сервисы отражены в модулях Customer, Inventory, Tax и Quote * (клиент, являющийся сервисом для эмуляции, в Quote есть оставшиеся области, требующие рефакторинга). Модуль только API можно увидеть в Каталоге, Продажах и CMS. Для полностью реорганизованных сервисов вам нужно всего лишь добавить плагин для метода сервиса, чтобы повлиять как на веб-интерфейс API, так и на графический интерфейс. Для модулей только API вам нужно подключить сервисный метод, чтобы влиять на веб-интерфейс API, но все равно нужно будет выполнить настройку стиля 1x, чтобы повлиять на графический интерфейс.
SPI - это, в основном, интерфейсы в коде, обозначенном аннотацией
@api
, которые предназначены для сторонних разработчиков, чтобы обеспечить некоторую функциональность бизнеса. Пример SPI (CarrierInterface
), определенного в модуле доставки, который вы бы внедрили в свой модуль доставки (например, Ups).Сервисная структура предоставляет ряд интересных преимуществ. Простое отображение в виде веб-API (и публикация сообщения 2.0 через очереди сообщений) в
webapi.xml
конфигурации vi (в стиле SOAP и REST). В ближайшей перспективе (пост 2.0) мы добавим вызовы API (синхронизированные вызовы или веб-заезды, если они настроены на запуск асинхронных сообщений), которыми можно управлять / выставлять через конфигурацию. Безопасная установка / обновление - вы можете программно определять проблемные ситуации (2 или более расширений, реализующих один и тот же интерфейс). Оптимизированная настройка, которая влияет как на веб-API, так и на графический интерфейс, поскольку есть только один метод / служба для настройки (для полностью переработанного модуля или новых модулей / служб, созданных сообществом).источник
Проверьте использование этих методов:
\Magento\Customer\Api\AccountManagementInterface::createAccount
\Magento\Customer\Api\CustomerRepositoryInterface::getById
источник
Сервисные контракты Magento
По сути, сервисные контракты - это просто набор интерфейсов и классов, которые защищают целостность данных и скрывают бизнес-логику. Причина, по которой клиенты захотят использовать это, заключается в том, что контракт позволяет сервису развиваться, не затрагивая его пользователей.
Это обновление важно по той причине, что оно меняет способ взаимодействия пользователей с различными модулями. В Magento 1 не было хороших способов взаимодействия с другими модулями. С контрактами на обслуживание в Magento 2 вы можете легко получать доступ к данным и манипулировать ими, не беспокоясь о структуре системы.
Архитектура сервисного контракта
Сервисный уровень имеет два разных типа интерфейса: интерфейсы данных и сервисные интерфейсы. Интерфейсы данных - это объекты, которые сохраняют целостность данных, используя следующие шаблоны:
Сервисные интерфейсы предоставляют набор открытых методов, которые клиент может использовать. Существует три подтипа сервисных интерфейсов:
Интерфейсы репозитория
Интерфейсы репозитория гарантируют, что пользователь может получить доступ к постоянным объектам данных. Например, постоянными объектами данных в клиентском модуле являются Consumer, Address и Group. Это дает нам три разных интерфейса:
Методы, которые имеют эти интерфейсы:
Интерфейсы управления
Эти интерфейсы содержат различные функции управления, которые не связаны с хранилищами. Вот некоторые примеры:
Количество шаблонов постоянно растет, и при этом некоторые из этих функций, вероятно, будут добавлены к ним.
Интерфейсы метаданных
Интерфейсы метаданных предоставляют информацию обо всех атрибутах, которые определены для конкретного объекта. Сюда также входят настраиваемые атрибуты, доступ к которым можно получить с помощью функции getCustomAttribute ($ name). Эти пользовательские атрибуты включают в себя:
Ссылка:
https://www.interactivated.me/uk/blog/service-contracts-magento-2/
источник