วิธีปฏิบัติที่ดีที่สุดสำหรับการสร้างโมดูลโดยใช้คลาส


19

ฉันกำลังมองหาที่จะเริ่มสร้างโมดูลของฉันเป็นชั้นเรียนตอนนี้ที่สันหลังยาว / โหลดอัตโนมัติอยู่ใน Drupal 7 และฉันชอบที่จะดูโมดูล (contrib หรือแกนหลัก) ที่ทำงานได้ดีมาก

มีวิธีที่สร้างสรรค์สำหรับการรวมคลาสเป็น hooks หรือไม่? ฉันจะใช้คุณสมบัติแต่ละอย่างเป็นปลั๊กอินของ ctools หรือไม่?

ผู้คนโดยใด ๆ ที่ควรทราบว่ามี D7 ใหม่files[]ประกาศในโมดูล.infoไฟล์สำหรับการเรียนอัตโนมัติ / ขี้เกียจโหลด / อินเตอร์เฟซ: การเขียน .info ไฟล์ (Drupal 7.x)

ต่อไปนี้เป็นที่ดีอ่านจะได้รับแรงจูงใจและรัฐธรรมนูญ (มันเป็น) จาก Drupal ชุมชนการเขียนโปรแกรม Drupal จากมุมมองเชิงวัตถุ

คำตอบ:


16

โมดูลไม่ใช่คลาสโดย Crell คือสิ่งที่คุณควรอ่านก่อน

ส่วน OOP ที่ใหญ่ที่สุดใน Drupal 7 คือเลเยอร์ abstraction ฐานข้อมูลใหม่ (ออกแบบโดย Crell เดียวกันและอื่น ๆ ) ซึ่งใช้รูปแบบมากมายที่สามารถและควรนำกลับมาใช้ใหม่

ตัวอย่างเช่น:

  • กำหนดอินเทอร์เฟซสำหรับสิ่งใดก็ตามที่สามารถเปลี่ยนได้ใช้ได้กับอินเตอร์เฟสภายในเท่านั้น ตัวอย่าง: SelectQueryInterface
  • ชั้นเดียวหมายถึง "สิ่ง" เดียว ตัวอย่างเช่น SelectQuery เป็นแบบสอบถามแบบใช้เลือกข้อมูล DatabaseConnectionเป็นการเชื่อมต่อกับฐานข้อมูลและอื่น ๆ ดูhttp://en.wikipedia.org/wiki/Cohesion_(computer_science )
  • ใช้การสืบทอดเพื่ออนุญาตการใช้งานบางอย่าง คลาสส่วนใหญ่ใน DBTNG สามารถมีคลาสย่อยเฉพาะไดร์เวอร์ซึ่งจะถูกใช้โดยอัตโนมัติและรวมไว้หากมีอยู่ ยกตัวอย่างเช่นSelectQuery_mysql วิธีที่จะทำ
  • Extendersซึ่งเป็นการใช้งานของรูปแบบมัณฑนากรเพื่อเพิ่มฟังก์ชันการทำงานเพิ่มเติมให้กับ SelectQuery Class Extenders สามารถมี subclasses ไดรเวอร์เฉพาะเจาะจงเกินไป

สิ่งที่ยังคงกล่าวถึง controversalyเป็นข้อมูลที่หลบซ่อนตัว DBTNG ดำเนินการโดยการป้องกันคุณสมบัติของคลาสและไม่อนุญาตการเข้าถึงโดยตรง ในทางกลับกันเรามี hook_query_alter () และพวกเขาสามารถเปลี่ยนได้อย่างอิสระกับเกือบต่างๆโดยทะเยอทะยานอ้างอิงวิธีการ


คำตอบที่ดีทรัพยากรที่ยอดเยี่ยมมากมายที่จะอัพเดตความคิดของฉันเมื่อสร้างรหัสโมดูลของฉัน!
electblake

3

นี่เป็นคำถามที่น่าสนใจ

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

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


ขอบคุณสำหรับข้อมูลเชิงลึกและฉันเข้าใจว่าฉันยังต้องมี hook_functions เพื่อลงทะเบียนอย่างถูกต้องภายใน Drupal แต่ฉันอยากรู้ว่าโมดูลใช้งานอย่างไร ฉันจะดูที่โมดูลมุมมอง (และหวังว่าจะไม่หายไป) - โปรดอัปเดตคำตอบของคุณหากคุณพบเคสและตัวอย่างที่แยกได้มากขึ้นตัวอย่าง / ตัวอย่างของรูปแบบที่คุณค้นหา: D
electblake

2

Entity API (โมดูล contrib) ช่วยให้คุณประกาศ "คลาสเอนทิตี" สำหรับแต่ละประเภทเอนทิตีของคุณดังนั้นรหัสทั้งหมดที่เกี่ยวข้องกับเอนทิตีของคุณ (สร้าง, โหลด, บันทึก, การเข้าถึงและอื่น ๆ ) สามารถไปในชั้นเรียนได้ กลุ่มทำมันเช่น)

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

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