Magento 2: каковы преимущества использования сервисных контрактов?

15

Таким образом, как некоторые из вас могут знать, рекомендуемый Magento 2 способ работы с моделями / коллекциями для действий CRUD - это использование сервисных контрактов.

Но все же, согласно Magento SE Q & A, кажется, что большинство людей склонны использовать модель / модель ресурсов / коллекцию напрямую.

В качестве примера для загрузки цитаты я могу сделать это напрямую через фабрику следующим образом:

$this->quoteFactory->create()->load($quoteId);

Где $this->quoteFactoryэкземпляр\Magento\Quote\Model\QuoteFactory

Но я также могу сделать это через сервисный контракт, например:

$this->quoteRepository->get($quoteId);

Где $this->quoteRepositoryэкземпляр\Magento\Quote\Api\CartRepositoryInterface

Итак, мои вопросы: каковы преимущества использования сервисных контрактов над фабриками?

Рафаэль в цифровом пианизме
источник

Ответы:

18

Преимущества использования сервисных контрактов, (согласно пониманию magento 2)

Контракты на обслуживание имеют ряд важных функций для magento 2, таких как:

  • Модернизация модуля стала легкой.

  • Упростите настройки модуля, не копаясь в файлах ядра.

  • Уменьшите конфликт между модулями в системе.

  • Модернизация Magento безопаснее при использовании сервисного контракта.

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

  • Для моделей / коллекций этот случай не соответствует действительности в новых выпусках.
Ракеш Джесадия
источник
2

Преимущества сервисного контракта:

  • Улучшить модульность Magento

  • Убедитесь, что четко определенный, долговечный API-интерфейс, который могут реализовывать другие модули и сторонние расширения

  • Упростите настройку сервисов как веб-API.

  • Объекты данных раскрывают более простую модель данных, чем модель данных в базовой схеме реляционной базы данных

  • Используйте разные технологии хранения для разных сборов данных

Jameslj
источник
2

Я думаю, что наибольшим преимуществом является то, что модули могут определять, какие функции могут использоваться другими модулями. В Magento 1 у вас были помощники, которые часто неправильно использовались для этой цели (но это совсем другое обсуждение), но в Magento 2 ваш модуль может предоставлять функциональность другим модулям (например, сторонним разработчикам) и разделять их и самостоятельно -contained.

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

Несколько примеров:

Хотите связать продукт с несколькими категориями? Используйте \Magento\Catalog\Api\CategoryLinkManagementInterface:

$this->categoryLinkManagement->assignProductToCategories(
    $sku,
    $categoryIds
);

Хотите увеличить количество товара на складе? Используйте Magento\CatalogInventory\Api\StockManagementInterface:

$this->stockManagement->backItemQty(
    $productId,
    $itemsToReceive
);

Эти два примера прекрасно демонстрируют правильное использование сервисных контрактов. Кроме того, они предоставляют единый интерфейс для связи с:

  • Другие модули (как описано выше)
  • Консольные Команды
  • API Calls
  • и т.п.
Гиль Беркерс
источник