Saya mengerti bahwa cara yang disukai untuk bekerja di antara modul di Magento 2 adalah menggunakan kontrak layanan.
Jadi, jika saya ingin memuat suatu produk, saya menggunakan gudang produk:
$product = $productRepository->getById($id);
yang dengan kontrak mengembalikan instance dari Magento\Catalog\Api\Data\ProductInterface
.
Tapi saya juga bisa menggunakan cara lama, memanggil lapisan domain secara langsung:
$product = $productFactory->create()->load($id);
Apakah ada kasus di mana ini perlu atau bermanfaat?
Devdocs mengatakan (sorot ditambahkan):
Modul dapat langsung memanggil modul lain. Solusi yang digabungkan secara ketat ini tidak direkomendasikan untuk sebagian besar situasi, tetapi terkadang tidak dapat dihindari .
[...]
Strategi Anda untuk memanggil kode lapisan-domain modul lain sangat tergantung pada konfigurasi unik dan kebutuhan sistem Anda.
Sumber: http://devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/domain_layer.html
Dan komentar pada pertanyaan terkait menyatakan:
menggunakan Repositori akan memberi Anda model data Produk (
Api/Data/Product
), yang merupakan model Produk yang diubah menjadi DTO yang dumbed-down. Sesuatu untuk dipertimbangkan, karena mereka sangat berbeda
Tapi sejauh yang saya bisa lihat objeknya sama dalam kondisi normal, hanya tipe return per phpDoc berbeda ( Magento\Catalog\Api\Data\ProductInterface
/ Magento\Catalog\Model\Product
)