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を確保する

  • サービスをWeb APIとして簡単に構成できます。

  • データエンティティは、基礎となるリレーショナルデータベーススキーマのデータモデルよりも単純なデータモデルを明らかにします

  • データコレクションごとに異なるストレージテクノロジーを使用する


2

最大の利点は、モジュールが他のモジュールで使用できる機能を決定できることです。Magento 1では、この目的のためにしばしば誤用されるヘルパーがありました(しかし、それはまったく議論されています)が、Magento 2では、モジュールは他のモジュールに機能を提供でき(たとえば、サードパーティの開発者によって)、それを分離して自己にすることができます含まれています。

依存性注入は、構築でインターフェイスを使用できるシステムを提供するため、これらのパブリックメソッドにのみアクセスできます。

いくつかの例:

製品を複数のカテゴリにリンクしたいですか?使用\Magento\Catalog\Api\CategoryLinkManagementInterface

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

製品の在庫量を増やしたいですか?使用Magento\CatalogInventory\Api\StockManagementInterface

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

これら2つの例は、サービス契約の適切な使用を完全に示しています。それに加えて、彼らはと通信するための統一されたインターフェースを提供します:

  • 他のモジュール(上記のとおり)
  • コンソールコマンド
  • API呼び出し
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.