วีโอไอพีมีรูปแบบการออกแบบกี่รูปแบบ


15

Magento 2 มีรูปแบบการออกแบบกี่รูปแบบ?

คำตอบ:


37

Magento 1/2 ลวดลายการออกแบบ

ส่วนที่ 1: MVC

วีโอไอพีใช้รูปแบบ MVC ที่ไม่เหมือนใครโดยใช้เลเยอร์การตั้งค่าตาม DOM มันใช้ประโยชน์จาก xml เพื่อขับเคลื่อนการกำหนดค่าและการดำเนินการของแอปพลิเคชันด้านบนของสถาปัตยกรรม Model-View-Controller ปกติ

ส่วนที่ 2: ตัวควบคุมด้านหน้า

Magento ใช้รูปแบบ Front Controller ในการนำเวิร์กโฟลว์มาใช้กับแอพพลิเคชั่น มันมีจุดเริ่มต้นเดียว (index.php) สำหรับคำขอทั้งหมดของมัน เรามาดูกันว่ามันทำงานอย่างไร

ส่วนที่ 3: โรงงาน

วิธีการจากโรงงานใช้เพื่อยกตัวอย่างคลาสใน Magento คุณยกตัวอย่างคลาสใน Magento โดยการเรียกวิธีการที่เหมาะสมผ่านชื่อนามธรรมแทนกลุ่มคลาสตามด้วยชื่อคลาส กลุ่มคลาสและ abstractions ที่เหมาะสมถูกประกาศในไฟล์ XML การกำหนดค่าของคุณในโฟลเดอร์ / etc / module ของคุณ

ส่วนที่ 4: ซิงเกิลตัน

เช่นเดียวกับนามธรรมระดับโรงงานและกลุ่มคลาสใน Magento รูปแบบ Singleton นั้นถูกยกตัวอย่างสำหรับ Blocks และ Classes เหมือนกัน

ส่วนที่ 5: รีจิสทรี

รูปแบบการลงทะเบียนของเขานั้นเป็นรูปแบบที่อนุญาตให้วัตถุหรือข้อมูลใด ๆ สามารถใช้ได้ในขอบเขตส่วนกลางสาธารณะสำหรับทรัพยากรใด ๆ ที่จะใช้

ตอนที่ 6: ต้นแบบ

รูปแบบต้นแบบใน Magento ใช้เป็นส่วนขยายของรูปแบบนามธรรมจากโรงงาน จะทำให้แน่ใจว่าคลาสย่อยที่เหมาะสมนั้นถูกสร้างอินสแตนซ์ผ่านประเภทที่เหมาะสมที่กำหนดให้กับวัตถุ สิ่งนี้หมายความว่า? โดยทั่วไปแล้วหมายความว่าเมื่อใดก็ตามที่คุณต้องการรับคลาสเฉพาะที่กำหนดผ่านประเภทพาเรนต์รูปแบบต้นแบบจะทำให้แน่ใจว่าคุณได้คลาสที่ถูกต้องที่สามารถจัดการสิ่งที่คุณต้องการ

ตอนที่ 7: กลุ่มวัตถุ

รูปแบบ Object Pool ช่วยให้วัตถุพร้อมใช้งานซ้ำแล้วซ้ำอีกแทนที่การสร้างอินสแตนซ์ใหม่อีกครั้งและทำลายพวกเขาเมื่อเสร็จสิ้น มันเป็นวิธีที่ดีในการประหยัดการใช้หน่วยความจำและคำนวณรอบ

ตอนที่ 8: Iterator

รูปแบบ Iterator เป็นรูปแบบการออกแบบที่อนุญาตให้วัตถุเคลื่อนที่ผ่านองค์ประกอบของคลาสอื่น สิ่งนี้อนุญาตให้คุณระบุตัววนซ้ำและอนุญาตให้ส่งผ่านชุดข้อมูลที่แตกต่างกันหลายชุดโดยไม่ต้องเปลี่ยนโครงสร้างพื้นฐานที่อนุญาตการวนซ้ำ

ตอนที่ 9: ขี้เกียจโหลด

Lazy Loading เป็นรูปแบบการออกแบบที่ทำให้การโหลดวัตถุล่าช้าจนกว่าจะมีการเรียกใช้วัตถุนั้น ด้วย Magento พวกเขาไม่ใช้สิ่งนี้กับวัตถุ แต่เป็นข้อมูล

ตอนที่ 10: ผู้ให้บริการ

ตัวระบุตำแหน่งบริการเป็นรูปแบบการออกแบบที่อนุญาตให้ผู้ใช้รับบริการโดยห่อหุ้มกระบวนการภายในเลเยอร์นามธรรม วิธีนี้ช่วยให้ผู้ใช้สามารถเรียกคืนบริการที่เหมาะสมหรือดีที่สุดโดยไม่ทราบว่าบริการนั้นอยู่ในช่วงรันไทม์

ตอนที่ 11: โมดูล

รูปแบบการออกแบบโมดูลเป็นรูปแบบของการเขียนโปรแกรมแบบโมดูลาร์ที่เน้นการจัดกลุ่มการทำงานของโปรแกรมเป็นโมดูลที่แยกอิสระ

ตอนที่ 12: ผู้สังเกตการณ์

รูปแบบของผู้สังเกตการณ์คือตำแหน่งที่ผู้ฟังเหตุการณ์ถูกกำหนดไว้ ณ จุดหนึ่งระหว่างการทำงานของแอปพลิเคชัน ส่วนประกอบอื่น ๆ ของแอปพลิเคชั่นสามารถ“ เชื่อมต่อ” เข้าไปในฟังเหตุการณ์นี้และรันโค้ดของพวกเขาในช่วงนี้

ตอนที่ 13: บันทึกที่ใช้งานอยู่

วัตถุเป็นตัวแทนของแถวในตารางฐานข้อมูล วัตถุเหล่านี้ควรมีคุณสมบัติที่สะท้อนถึงคอลัมน์ที่แสดงถึงโครงสร้างของตารางและวิธีการที่อนุญาตการแก้ไขคุณสมบัติเหล่านี้ในฐานข้อมูล

การใช้รูปแบบโดย Magento

คลาสที่สืบทอดหลังจากคลาส Mage_Core_Model_Abstract มีการเข้าถึงเมธอด load (), save () และ delete () ที่อนุญาตให้โหลดแก้ไขสร้างหรือลบเร็กคอร์ดในตารางที่คลาสนั้นเชื่อมต่อด้วย นอกจากนี้คลาส Mage_Core_Model_Abstract สืบทอดมาจาก Varien_Object ซึ่งทำให้เราสามารถเข้าถึงวิธีการเวทย์มนตร์อย่างแท้จริง __set () และ __get () ที่รับผิดชอบการแมปอัตโนมัติของคอลัมน์ในตารางฐานข้อมูลที่มีคุณสมบัติของวัตถุที่กำหนด

วีโอไอพีเพิ่มเติม 2

รูปแบบการออกแบบสัญญาบริการ

Magento เป็นระบบพื้นฐานหรือขยายซึ่งช่วยให้นักพัฒนาบุคคลที่สามสามารถปรับแต่งและเขียนทับส่วนหลักของกรอบงาน การปรับแต่งเหล่านี้อาจนำไปสู่ปัญหาต่าง ๆ ตัวอย่างเช่นมันจะกลายเป็นสำหรับนักพัฒนาเพื่อติดตามการปรับแต่งที่ทำโดยส่วนขยายภายนอก ดังนั้นการเอาชนะวีโอไอพีนี้จึงเกิดขึ้นกับรูปแบบสัญญาบริการ สัญญาบริการเป็นชุดของอินเทอร์เฟซที่ทำหน้าที่เป็นเลเยอร์ระหว่างผู้ใช้และชั้นธุรกิจ ดังนั้นแทนที่จะเปิดเผยตรรกะทางธุรกิจโดยตรงสำหรับการปรับแต่งให้กับผู้ใช้ปลายทางเลเยอร์ที่เรียกว่าสัญญาการบริการจะเกิดขึ้นระหว่างนั้น

สัญญาบริการจะช่วยปรับปรุงมาตรฐานของ Magento ช่วยผู้ค้าสำหรับการอัพเกรด Magento ง่ายมั่นใจได้ว่า API ที่กำหนดไว้อย่างดีและคงทนที่ภายนอกและโมดูลวีโอไอพีอื่น ๆ ได้ดำเนินการ จัดเตรียมวิธีง่ายๆในการเปิดเผยตรรกะทางธุรกิจผ่านอินเตอร์เฟส REST หรือ SOAP

ผู้จัดการวัตถุ

มันประกอบด้วยหลายรูปแบบเช่น: - การฉีดขึ้นรูป, ซิงเกิลตัน, โรงงาน, โรงงานนามธรรม, คอมโพสิต, กลยุทธ์, CQRS, มัณฑนากรและอื่น ๆ อีกมากมาย เราจะพูดคุยเกี่ยวกับรูปแบบที่ใช้มากที่สุดในหมู่เหล่านี้ ผู้จัดการวัตถุมีบทบาทสำคัญอย่างมากวีโอไอพีไม่อนุญาตให้ใช้งานโดยตรง ผู้จัดการวัตถุมีหน้าที่รับผิดชอบในการนำรูปแบบโรงงาน, ซิงเกิลและพร็อกซีมาใช้ โดยอัตโนมัติพารามิเตอร์ในตัวสร้างคลาส ก่อนที่จะย้ายในอนาคตให้เข้าใจเกี่ยวกับวัตถุที่ฉีดและไม่สามารถฉีดได้: -

วัตถุที่เป็นอันตรายเข้ามา

พวกเขาไม่มีตัวตนของตนเองเช่น EventManager, CustomerAccountManagementService

วัตถุประสงค์ที่ไม่เข้าข่าย

เช่นลูกค้าผลิตภัณฑ์ ฯลฯ หน่วยงานเหล่านี้มักจะมีตัวตนและรัฐเนื่องจากพวกเขามีตัวตนของพวกเขามันเป็นสิ่งสำคัญที่จะต้องรู้ว่าเราต้องทำงานกับอินสแตนซ์ที่แน่นอนของเอนทิตี

ฉีดขึ้นอยู่กับ

มันเป็นทางเลือกแทน Mage ใน magento 1 มันเป็นแนวคิดของการฉีดวัตถุที่ต้องพึ่งพาผ่านสภาพแวดล้อมภายนอกแทนที่จะสร้างมันขึ้นมาภายใน ดังนั้นเราจะขอทรัพยากรเมื่อวัตถุของเราถูกสร้างขึ้นแทนที่จะสร้างทรัพยากรเมื่อจำเป็น สิ่งนี้จะช่วยในการดัดแปลงและการทดสอบในอนาคตกลายเป็นเรื่องง่ายมากโดยจำลองวัตถุที่ต้องการ

รูปแบบโรงงานหรือชั้นเรียนโรงงาน:

ในคลาส Magento 2 Factory สร้างเลเยอร์ระหว่างตัวจัดการวัตถุและรหัสธุรกิจ คลาสของโรงงานไม่จำเป็นต้องกำหนดอย่างชัดเจนเนื่องจากสร้างขึ้นโดยอัตโนมัติ เราควรสร้างคลาสจากโรงงานสำหรับวัตถุที่ไม่สามารถฉีดได้

ลวดลายพร็อกซี่

คลาสพร็อกซีถูกใช้เพื่อทำงานแทนคลาสอื่นและในวีโอไอพี 2 บางครั้งพวกเขาจะใช้แทนคลาสหิวทรัพยากร เพื่อให้เข้าใจว่าพร็อกซีคลาสใดกันให้ดูเหตุผลที่นำไปสู่การเกิดคลาสพร็อกซี ดังที่เราทราบวีโอไอพีใช้คอนสตรัคเตอร์ในการสร้างวัตถุและเมื่อเราอินสแตนซ์วัตถุทุกคลาสในคอนสตรัคเตอร์จะสร้างอินสแตนซ์ซึ่งนำไปสู่โซ่ของการสร้างอินสแตนซ์ผ่านคอนสตรัคเตอร์ ดังนั้นเพื่อหยุดการอินสแตนซ์โซ่ Magento ใช้คลาสพร็อกซี

ให้ดูรหัสต่อไปนี้: -

Magento\Catalog\Model\Product\Attribute\Source\Status\Proxy

Magento\Catalog\Model\Product\Link\Proxy

ดังนั้นในโค้ดด้านบนเรากำลังใช้คลาสพร็อกซีสำหรับ catalogProductStatus และ productLink เมื่อเราวิ่ง

 php bin/magento setup:di:compile 

วีโอไอพีสร้างคลาสพร็อกซีในทันทีโดยใช้ di.xml ด้วยการประชุมบางอย่างคงที่ดังนั้นแทนที่วัตถุต้นฉบับด้วยวัตถุคลาสพร็อกซี ตอนนี้ให้เราดูคลาสพร็อกซีของเราเพื่อทำความเข้าใจว่ามันทำงานอย่างไร

วีโอไอพีการประชุมสามัญบางอย่างปฏิบัติตามในขณะที่สร้างพร็อกซี: -

  • เนมสเปซของคลาสพร็อกซีจะเหมือนกับต้นฉบับ (Magento \ Catalog \ Model \ Product \ Attribute \ Source \ Status)
  • คลาสพร็อกซีขยายหนึ่งวัตถุเท่านั้นเช่นตัวจัดการวัตถุ
  • มีฟังก์ชั่นเวทย์มนตร์เช่น __sleep, __ ตื่นซึ่งถูกเรียกใช้เฉพาะในบางแอ็คชั่นและฟังก์ชั่นเช่น __clone จะทำให้วัตถุของคลาสเดิมและจะให้วัตถุเมื่อจำเป็นเท่านั้น (ใช้รูปแบบการออกแบบการโหลดแบบขี้เกียจ ) ประสิทธิภาพของแอปพลิเคชัน https://devdocs.magento.com/guides/v2.0/extension-dev-guide/proxies.html

ปลั๊กอิน (ตัวดัก)

ภาพรวม

ปลั๊กอินหรือตัวดักจับเป็นคลาสที่ปรับเปลี่ยนพฤติกรรมของฟังก์ชั่นคลาสสาธารณะโดยสกัดกั้นการเรียกใช้ฟังก์ชันและการเรียกใช้รหัสก่อนหลังหรือรอบการเรียกใช้ฟังก์ชันนั้น สิ่งนี้ช่วยให้คุณสามารถแทนที่หรือขยายลักษณะการทำงานของวิธีสาธารณะดั้งเดิมสำหรับคลาสหรืออินเทอร์เฟซใด ๆ

ส่วนขยายที่ต้องการที่จะสกัดกั้นและเปลี่ยนพฤติกรรมของวิธีการสาธารณะสามารถสร้างคลาสปลั๊กอินซึ่งเรียกว่าเป็นปลั๊กอิน

วิธีการสกัดกั้นนี้ช่วยลดความขัดแย้งระหว่างส่วนขยายที่เปลี่ยนพฤติกรรมของคลาสหรือวิธีการเดียวกัน การใช้งานคลาสปลั๊กอินของคุณจะเปลี่ยนพฤติกรรมของฟังก์ชั่นคลาส แต่จะไม่เปลี่ยนคลาสเอง เนื่องจากสามารถเรียกได้เรียงตามลำดับการเรียงลำดับที่กำหนดค่าไว้ตัวดักเหล่านี้จึงไม่ขัดแย้งกัน

ข้อ จำกัด

ไม่สามารถใช้ปลั๊กอินกับสิ่งใดสิ่งหนึ่งต่อไปนี้:

  • วิธีการขั้นสุดท้าย
  • ชั้นเรียนสุดท้าย
  • วิธีการที่ไม่ใช่แบบสาธารณะ
  • วิธีการคงที่
  • __สร้าง
  • ประเภทเสมือน
  • วัตถุที่สร้างอินสแตนซ์ก่อน Magento \ Framework \ Interception จะถูก bootstrapped
  • วัตถุที่ไม่ได้สร้างอินสแตนซ์โดย ObjectManager (เช่นโดยการใช้ใหม่โดยตรง) https://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html

ObjectManager

ภาพรวม

แอปพลิเคชันขนาดใหญ่เช่นแอปพลิเคชั่น Magento ใช้ตัวจัดการวัตถุเพื่อหลีกเลี่ยงโค้ดสำเร็จรูปเมื่อสร้างวัตถุระหว่างการสร้างอินสแตนซ์

ในกรอบวีโอไอพีการใช้งาน ObjectManagerInterface จะทำหน้าที่ของผู้จัดการวัตถุ

ความรับผิดชอบ

ตัวจัดการวัตถุมีความรับผิดชอบดังต่อไปนี้:

การสร้างวัตถุในโรงงานและผู้รับมอบฉันทะ การนำรูปแบบซิงเกิลไปใช้โดยส่งคืนอินสแตนซ์ที่แบ่งใช้เดียวกันของคลาสเมื่อร้องขอ การจัดการการพึ่งพาโดยอินสแตนซ์ของคลาสที่ต้องการเมื่อนวกรรมิกร้องขออินเตอร์เฟส พารามิเตอร์สร้างอินสแตนซ์โดยอัตโนมัติในตัวสร้างคลาส https://devdocs.magento.com/guides/v2.0/extension-dev-guide/object-manager.html

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