ฉันเข้าใจว่าวิธีที่ต้องการใช้ระหว่างโมดูลใน 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
)