Dalam Magento 2, apakah ada contoh konkret tentang sesuatu yang dibangun menggunakan konsep Kontrak Layanan ? Saya telah melihat istilah ini banyak dilontarkan, tetapi melihat Magento 2 seperti yang ada sekarang tidak jelas bagi saya apakah Kontrak Layanan lebih merupakan prinsip panduan, atau apakah mereka benar-benar mengikat kembali ke implementasi spesifik hal-hal di Magento 2.
magento2
service-contract
Alan Storm
sumber
sumber
Jawaban:
Seperti yang saya pahami, semua antarmuka yang ditentukan dalam folder Api adalah Kontrak Layanan. Jadi di mana saja antarmuka digunakan, bukan implementasi sebenarnya dari kelas itu menggunakan Kontrak Layanan.
Contohnya adalah penerapan plugin ini di sini https://github.com/magento/magento2/blob/2.3.2/app/code/Magento/GiftMessage/Model/Plugin/OrderGet.php#L78
Itu menggunakan
dari pada
\Magento\Sales\Model\Order
sumber
Layanan (juga disebut kontrak layanan) adalah salah satu pola pengembangan inti kami di Magento 2 untuk memastikan antarmuka yang stabil untuk penyesuaian / ekstensi yang mudah. Mereka mengambil 2 formulir dalam basis kode (keduanya dijelaskan
@api
pada kelas atau metode kelas untuk mengidentifikasi mereka sebagai antarmuka yang stabil yang dapat Anda sesuaikan dan atau tampilkan sebagai API web): API atau SPI. API didefinisikan dalam folder API dan mengambil dua bentuk - layanan yang sepenuhnya di-refactored dan hanya modul API saja.Layanan yang sepenuhnya di-refactored dicerminkan dalam modul Pelanggan, Inventaris, Pajak, dan Penawaran * (Pelanggan menjadi layanan untuk ditiru, Penawaran memiliki area-area yang tersisa yang perlu dire-refactored). Modul hanya API dapat dilihat di Katalog, Penjualan dan CMS. Untuk layanan yang sepenuhnya di-refactored, Anda hanya perlu melakukan plugin pada metode layanan untuk memberi dampak pada web apis dan GUI. Untuk modul khusus API Anda perlu melakukan plugin pada metode layanan untuk mempengaruhi web apis tetapi masih perlu melakukan kustomisasi gaya 1x untuk memengaruhi GUI.
SPI pada dasarnya adalah antarmuka dalam kode yang dijelaskan dengan
@api
yang dimaksudkan tempat yang pihak ketiga akan menerapkan untuk menyediakan beberapa fungsionalitas bisnis. Contoh SPI (CarrierInterface
) yang ditentukan dalam modul Pengiriman yang akan Anda terapkan dalam modul pengiriman Anda (yaitu, Ups).Kerangka kerja memberikan sejumlah keuntungan menarik. Eksposur yang mudah sebagai api web (dan posting 2.0 melalui antrian pesan) vi
webapi.xml
konfigurasi (seperti gaya SOAP dan REST). Dalam waktu dekat (posting 2.0) kita akan menambahkan panggilan API keluar (panggilan sinkronisasi, atau Webhooks jika dikonfigurasi untuk mem-boot async, pesan keluar) yang semuanya dapat dikelola / diekspos melalui konfigurasi. Pemasangan / peningkatan yang lebih aman - Anda dapat mengidentifikasi secara sistematis situasi masalah (2 ekstensi atau lebih yang mengimplementasikan antarmuka yang sama). Kustomisasi yang disederhanakan yang memengaruhi apis web dan gui karena hanya ada satu metode / layanan yang dapat disesuaikan (untuk modul yang sepenuhnya di-refactored atau modul / layanan baru yang dibuat oleh komunitas).sumber
Periksa penggunaan metode ini:
\Magento\Customer\Api\AccountManagementInterface::createAccount
\Magento\Customer\Api\CustomerRepositoryInterface::getById
sumber
Kontrak layanan Magento
Pada dasarnya, kontrak layanan hanyalah seperangkat antarmuka dan kelas yang melindungi integritas data dan menyembunyikan logika bisnis. Alasan mengapa pelanggan ingin menggunakan ini adalah karena kontrak memungkinkan layanan untuk berkembang tanpa mempengaruhi penggunanya.
Alasan peningkatan ini penting adalah karena ini mengubah cara pengguna berinteraksi dengan modul yang berbeda. Di Magento 1, tidak ada cara yang baik untuk berinteraksi dengan modul lain. Dengan kontrak layanan di Magento 2, Anda dapat mengakses dan memanipulasi data dengan mudah, tanpa harus khawatir tentang struktur sistem.
Arsitektur kontrak layanan
Lapisan layanan memiliki dua jenis antarmuka yang berbeda: antarmuka data dan antarmuka layanan. Antarmuka data adalah objek yang menjaga integritas data dengan menggunakan pola berikut:
Antarmuka layanan menyediakan serangkaian metode publik yang dapat digunakan klien. Ada tiga subtipe antarmuka layanan:
Antarmuka repositori
Antarmuka repositori memastikan bahwa pengguna dapat mengakses entitas data yang persisten. Misalnya, entitas data persisten dalam Modul Pelanggan adalah Konsumen, Alamat, dan Grup. Ini memberi kita tiga antarmuka yang berbeda:
Metode yang dimiliki oleh antarmuka ini adalah:
Antarmuka manajemen
Antarmuka ini berisi fungsi manajemen yang berbeda yang tidak terkait dengan repositori. Berikut ini beberapa contohnya:
Jumlah pola terus bertambah, dan saat hal itu terjadi, beberapa fungsi ini kemungkinan akan ditambahkan kepada mereka.
Antarmuka metadata
Antarmuka metadata memberikan informasi tentang semua atribut yang didefinisikan untuk entitas tertentu. Ini juga termasuk atribut khusus, yang dapat Anda akses dengan fungsi getCustomAttribute ($ name). Atribut khusus ini meliputi:
Referensi:
https://www.interactivated.me/uk/blog/service-contracts-magento-2/
sumber