วิธีการแบบโมดูลาร์ของ Zend Framework มีตรรกะที่ดีอยู่เบื้องหลังหรือไม่

กรอบ Zend กำลังเติบโตอย่างรวดเร็ว เราทุกคนเห็นด้วยและเราทุกคนก็รู้สึกประหลาดใจในขณะที่ลองใช้โครงสร้างโมดูลาร์ของ Zend Framework ถ้าจะให้เป็นรูปธรรมในการบูตโมดูล - ไฟล์บูตสแตรปทั้งหมดของโมดูลจะถูกดำเนินการตั้งแต่เริ่มต้นไม่ว่าอย่างไรก็ตาม หากเราใช้/เข้าถึงโมดูลนั้นหรือไม่ เท่าที่ฉันจำได้ว่าโมดูลบูตสแตรปถูกดำเนินการเหมือนกับปลั๊กอินของบูทสแตรปหลัก แต่ในทางกลับกัน ฉันพบว่าการนำ ZF ไปใช้มีความซับซ้อนมากและเขียนขึ้นโดยคำนึงถึงรูปแบบการออกแบบเป็นอย่างมาก

ดังนั้นก่อนที่จะไปสะดุดกับ Module Lazy Load/Bootstrap ฉันอยากจะมีความคิดที่เป็นกลางเกี่ยวกับแง่มุมของการบูตสแตรป

-- การบูตโมดูลเริ่มต้นใน ZF มีตรรกะที่มั่นคงอยู่เบื้องหลังหรือควรเปลี่ยนเป็นบางอย่างเช่นการบูตแบบขี้เกียจ/ตามความต้องการ

ฉันรู้ว่าคำถามค่อนข้างจะอ้อม ดังนั้นให้ฉันให้มากกว่านี้

เช่นในแอปโมดูลาร์ เราต้องการให้การกำหนดค่าเริ่มต้นแยกกันสำหรับแต่ละโมดูล (เช่น เค้าโครงที่แยกจากกัน) และบูตสแตรปเป็นกระบวนทัศน์สำหรับ "ที่ที่จะทำการกำหนดค่าเริ่มต้น" ใช่ไหม? แต่ถ้าเราวางการกำหนดค่าเริ่มต้น/การกำหนดค่าตามที่ Zend Documentation บอก แอปพลิเคชันของเราจะโหลดการกำหนดค่าเริ่มต้นทั้งหมดที่ได้รับการตั้งค่าในทุกคลาสบูตสแตรปของโมดูลสำหรับทุกคำขอ (ฉันเป็นเพียงแขกรับเชิญและยังคงอยู่เมื่อฉันขอบางสิ่ง บูตสแตรปของผู้ดูแลระบบ จะถูกดำเนินการแม้ว่าจะอยู่เบื้องหลังก็ตาม) - มันค่อนข้างจะทำลายระบบมาก

เท่าที่ฉันเห็นมีสองวิธีที่ความคิดสามารถไหลได้

  1. ที่จะมีสิ่งต่าง ๆ ในโมดูลบูตสแตรปที่เป็นส่วนเสริมของทั้งระบบเท่านั้น (ค่อนข้างไม่เห็นว่ามันจะเป็นอะไรได้)
  2. หากต้องการเปลี่ยนวิธีที่โมดูลบูตสแตรปด้วยปลั๊กอิน Help Action หรือขยายคลาส Bootstrap ที่เกี่ยวข้องกับการบูสต์บูต Madule

และคำถามแรกของฉันคือ มีเหตุผลใดบ้างที่ต้องปฏิบัติตามตัวเลือกแรก และตัวเลือกที่ 2 จะเป็นตัวเลือกที่ดีหรือไม่


person simple    schedule 24.02.2010    source แหล่งที่มา


คำตอบ (1)


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

โมดูลขึ้นอยู่กับ

  • ขอ
  • เส้นทางที่เลือก
  • ถ้าสำหรับอดีต _forward() ถูกเรียก

แต่คุณอาจต้องการเพิ่มเส้นทางของคุณสำหรับแต่ละโมดูล ฉีด disatcher ของคุณเอง ฯลฯ และทั้งหมดนี้จำเป็นต้องทำก่อนที่จะสร้างออบเจ็กต์คำขอ นั่นเป็นเหตุผลว่าทำไมการบูตสแตรปทั้งหมดจึงเริ่มต้นตั้งแต่เริ่มต้น

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

person Tomáš Fejfar    schedule 24.02.2010
comment
คุณสามารถรับทรัพยากรจากบูตสแตรปที่เริ่มต้นอื่นๆ ได้ ดังนั้นจึงไม่มีสำเนาของอ็อบเจ็กต์ เช่น อะแดปเตอร์ db หรือมุมมอง - ไม่ว่าคุณจะได้รับทรัพยากรที่เริ่มต้นใน bootstrap อื่น ๆ (หลัก) ภายในโมดูล Bootstrap ได้อย่างไร เพราะฉันไม่สามารถรับทรัพยากรโครงร่างภายในโมดูลผู้ดูแลระบบได้ - person simple; 25.02.2010
comment
คุณไม่สามารถทำ $this-›getResource('layout') ได้ใช่ไหม นั่นทำให้ฉันประหลาดใจ ไม่ใช่ว่าฉันได้ลองแล้ว แต่ฉันคาดว่ามันจะได้ผลแบบนั้น... ขออภัยในความผิดพลาด :) - person Tomáš Fejfar; 25.02.2010