รูปแบบการออกแบบ“ Gang of Four” ใน Magento Core


10

มีรูปแบบการใช้งานที่ชัดเจนในแกนกลางของ Magento เช่น:

  • ซิงเกิล
  • Registry
  • เหตุการณ์ / สังเกตการณ์
  • โรงงาน
  • รุ่น / ดู / ควบคุม

แต่มีคนอื่นที่อาจใช้งานใน Magento ที่ฉันไม่ทราบเช่นนักแสดงมัณฑนากรมัณฑนากรรูปแบบกลยุทธ์

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


1
คำตอบสั้น ๆ : ไม่ แต่คุณลืม MVC :-)
Fabian Blechschmidt

2
ที่จริงแล้วมีรายการของรูปแบบการออกแบบใน Stack Overflow (มีลิงก์ในบุ๊คมาร์คของฉัน :)) - stackoverflow.com/questions/5041473/magento-design-patterns
Sergei Guk

โหวตขึ้นเพราะลิงก์นั้นกลับไปที่ SO
Ben Lessani - Sonassi

ว้าว. นั่นคือว่าสิ่งที่ผมกำลังมองหา กรุณาโพสต์เป็นคำตอบ!
philwinkle

คำตอบ:


12

มีรายการรูปแบบการออกแบบที่ใช้ใน Magento บน Stack Overflow

จากบทความ:

สิ่งที่ชัดเจนคือ:

โรงงาน:

$product = Mage::getModel('catalog/product');

ซิงเกิล:

$category = Mage::getSingleton('catalog/session');

Registry:

$currentCategory = Mage::registry('current_category');

ดูตัวช่วย:

Mage::helper('core');

ต้นแบบ:

Mage:getModel('catalog/product')->getTypeInstance();

กลุ่มวัตถุ:

$id = Mage::objects()->save($object);
$object = Mage::objects($id);

iterator:

Mage::getModel('catalog/product')->getCollection();

เหตุการณ์ / ฟัง:

Mage::dispatchEvent('model_load_before', $params);

แก้ไข

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

$product->save()
$product->getName()

วัตถุ Null

$collection->getFirstItem()

การโหลดขี้เกียจ - คอลเลกชันจะถูกโหลดเมื่อมีการวนซ้ำ

นอกจากนี้ยังมี5 บทความในบล็อก Ryan Streetเกี่ยวกับ MVC, Front Controller, Factory, Singleton และ Registry ใน Magento

แก้ไข
ฉันอาจเพิ่มว่า Magento 'ซิงเกิลตัน' เป็นแบบหลอกเดี่ยว เป็นการรวมกันของ 'โรงงาน' เพราะ Mage :: getSingleton () เป็นโรงงานและ 'Registry' เพราะในgetSingleton()วิธีการนี้เรียกว่า

self::register($registryKey, self::getModel($modelClass, $arguments))

2
ฉันอาจเพิ่ม 'Active record' ( $product->save(),, $product->getName()... ), 'Null object' ( $collection->getFirstItem()), 'Front Controller', `Lazy loading '(คอลเลกชันจะถูกโหลดเมื่อมีการทำซ้ำ)
Marius

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