Magento 2: การใช้สัญญาบริการมีประโยชน์อย่างไร?


15

ดังที่บางคนอาจจะรู้วิธีที่วีโอไอพี 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

ประโยชน์ของการใช้สัญญาบริการ (ตามความเข้าใจในคุณภาพเยี่ยม 2)

สัญญาบริการมีหน้าที่สำคัญหลายประการสำหรับวีโอไอพี 2 เช่น:

  • โมดูลการอัพเกรดเป็นเรื่องง่าย

  • ลดความซับซ้อนของการปรับแต่งให้เข้ากับโมดูลโดยไม่ต้องขุดลงในไฟล์คอร์

  • ลดความขัดแย้งระหว่างโมดูลในระบบ

  • การอัพเกรดวีโอไอพีปลอดภัยยิ่งขึ้นโดยใช้สัญญาบริการ

  • สำหรับบริการจะยังคงไม่เปลี่ยนแปลงภายในรุ่นใหม่ของมันทำให้การอัพเกรดในอนาคตเป็นเรื่องง่ายสำหรับโมดูลที่มีอยู่

  • สำหรับรุ่น / คอลเลกชันกรณีนี้ไม่เป็นความจริงภายในรีลีสใหม่

2

ประโยชน์ของสัญญาบริการ:

  • ปรับปรุงความเป็นโมดูลของ Magento

  • ตรวจสอบ API ที่ทนทานและชัดเจนที่โมดูลอื่นและส่วนขยายอื่นสามารถนำไปใช้ได้

  • ทำให้การกำหนดค่าบริการเป็นเว็บ API ง่ายขึ้น

  • เอนทิตีข้อมูลเปิดเผยตัวแบบข้อมูลที่ง่ายกว่าตัวแบบข้อมูลในสคีมาฐานข้อมูลเชิงสัมพันธ์

  • ใช้เทคโนโลยีการจัดเก็บที่แตกต่างกันสำหรับการรวบรวมข้อมูลที่แตกต่างกัน


2

ฉันคิดว่าประโยชน์ที่ยิ่งใหญ่ที่สุดคือโมดูลสามารถกำหนดฟังก์ชั่นที่สามารถใช้งานได้โดยโมดูลอื่น ๆ ใน Magento 1 คุณมีผู้ช่วยเหลือที่มักใช้งานผิดวัตถุประสงค์ (แต่นั่นเป็นเรื่องอื่นทั้งหมด) แต่ใน Magento 2 โมดูลของคุณสามารถให้ฟังก์ชันการทำงานกับโมดูลอื่น ๆ (ตัวอย่างเช่นนักพัฒนาบุคคลที่สาม) และแยกมันและตนเอง -contained

พึ่งพาการฉีดให้ระบบที่คุณสามารถใช้ส่วนต่อประสานในการก่อสร้างของคุณเพื่อให้คุณสามารถเข้าถึงวิธีการสาธารณะเหล่านั้น

ตัวอย่างบางส่วน:

ต้องการเชื่อมโยงผลิตภัณฑ์กับหลายหมวดหมู่หรือไม่ การใช้\Magento\Catalog\Api\CategoryLinkManagementInterface:

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

ต้องการเพิ่มปริมาณสต็อคผลิตภัณฑ์ใช่หรือไม่ การใช้Magento\CatalogInventory\Api\StockManagementInterface:

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

ตัวอย่างทั้งสองนี้แสดงให้เห็นถึงการใช้สัญญาบริการอย่างเหมาะสม นอกจากนั้นยังมีอินเตอร์เฟสที่ใช้ติดต่อสื่อสารกับ:

  • โมดูลอื่น ๆ (ตามที่อธิบายไว้ข้างต้น)
  • คำสั่งคอนโซล
  • การเรียก API
  • เป็นต้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.