Magento 2のモジュール間で作業する好ましい方法は、サービスコントラクトを使用することです。
したがって、製品をロードする場合は、製品リポジトリを使用します。
$product = $productRepository->getById($id);
これは、契約によりのインスタンスを返しますMagento\Catalog\Api\Data\ProductInterface
。
しかし、代わりに古い方法を使用して、ドメイン層を直接呼び出すこともできます。
$product = $productFactory->create()->load($id);
これが必要または有用になるケースはありますか?
devdocsの発言(ハイライト追加):
モジュールは別のモジュールを直接呼び出すことができます。この密結合ソリューションは、ほとんどの状況では推奨されませんが、避けられない場合があります。
[...]
別のモジュールのドメイン層コードを呼び出すための戦略は、システムの固有の構成とニーズに大きく依存します。
ソース:http : //devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/domain_layer.html
また、関連する質問に対するコメントは次のように述べています。
リポジトリを使用すると、製品データモデル(
Api/Data/Product
)が得られます。これは、縮約されたDTOに変換された製品モデルです。考慮すべきこと
しかし、私が見る限り、オブジェクトは通常の条件下で同じであり、phpDocごとの戻り値の型が異なるだけです(Magento\Catalog\Api\Data\ProductInterface
/ Magento\Catalog\Model\Product
)