Magento 2: apa manfaat menggunakan kontrak layanan?

15

Jadi seperti yang Anda ketahui, Magento 2 merekomendasikan cara untuk menangani model / koleksi untuk tindakan CRUD adalah dengan menggunakan kontrak layanan.

Tetapi masih menurut Magento SE T&J sepertinya sebagian besar orang cenderung menggunakan model / sumber daya model / koleksi sebagai gantinya.

Sebagai contoh untuk memuat penawaran, saya dapat melakukannya langsung melalui pabrik seperti ini:

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

Di mana $this->quoteFactoryadalah contoh dari\Magento\Quote\Model\QuoteFactory

Tapi saya juga bisa melakukannya melalui kontrak layanan seperti ini:

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

Di mana $this->quoteRepositoryadalah contoh dari\Magento\Quote\Api\CartRepositoryInterface

Jadi pertanyaan saya adalah apa manfaat menggunakan kontrak layanan atas pabrik?

Raphael di Digital Pianism
sumber

Jawaban:

18

Manfaat menggunakan kontrak layanan, (Sesuai pemahaman Magento 2)

Kontrak layanan memiliki sejumlah fungsi penting untuk Magento 2, seperti:

  • Peningkatan Modul menjadi mudah.

  • Sederhanakan kustomisasi ke modul tanpa menggali ke file inti.

  • Mengurangi konflik antar modul dalam sistem.

  • Upgrade Magento lebih aman menggunakan kontrak layanan.

  • Untuk layanan akan tetap tidak berubah dalam rilis baru itu, membuat peningkatan di masa depan mudah untuk modul yang ada.

  • Untuk model / koleksi, hal ini tidak benar dalam rilis baru.
Rakesh Jesadiya
sumber
2

Manfaat kontrak layanan:

  • Tingkatkan modularitas Magento

  • Pastikan API yang didefinisikan dengan baik, tahan lama yang dapat diterapkan oleh modul lain dan ekstensi pihak ketiga

  • Memudahkan mengonfigurasi layanan sebagai API web.

  • Entitas data mengungkapkan model data yang lebih sederhana daripada model data dalam skema basis data relasional yang mendasarinya

  • Gunakan teknologi penyimpanan yang berbeda untuk koleksi data yang berbeda

Jameslj
sumber
2

Saya pikir manfaat terbesar adalah modul dapat menentukan fungsionalitas mana yang dapat digunakan oleh modul lain. Di Magento 1 Anda memiliki pembantu yang sering disalahgunakan untuk tujuan ini (tapi itu adalah diskusi lainnya), tetapi di Magento 2 modul Anda dapat memberikan fungsionalitas ke modul lain (misalnya oleh pengembang pihak ke-3) dan memisahkannya sendiri -tahan.

Ketergantungan Injeksi menyediakan sistem di mana Anda dapat menggunakan antarmuka dalam konstruksi Anda sehingga Anda hanya memiliki akses ke metode publik tersebut.

Beberapa contoh:

Ingin menautkan produk ke beberapa kategori? Gunakan \Magento\Catalog\Api\CategoryLinkManagementInterface:

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

Ingin menambah jumlah stok suatu produk? Gunakan Magento\CatalogInventory\Api\StockManagementInterface:

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

Dua contoh ini menunjukkan dengan sempurna penggunaan kontrak layanan yang tepat. Selain itu, mereka menyediakan antarmuka yang seragam untuk berkomunikasi dengan:

  • Modul Lainnya (seperti dijelaskan di atas)
  • Perintah Konsol
  • Panggilan API
  • dll.
Giel Berkers
sumber