อะไรคือรูปแบบการออกแบบที่พบในโมดูลที่สนับสนุนที่โดดเด่น


10

นอกจากPresentation-abstraction-controlและรูปแบบอื่น ๆที่ใช้ใน Drupal coreแล้วมีรูปแบบการออกแบบอื่น ๆ ที่ใช้ในโมดูลที่ได้รับความนิยมเช่น Views, CCK และ Features หรือไม่


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

1
นี่อาจเป็นหัวข้อวิกิของชุมชนที่ดี
Chaulky

Community Wiki ไม่ได้ใช้อีกต่อไปสำหรับคำถามที่ไม่เป็นที่ยอมรับหรือเป็นแนวเขต ดูอนาคตของชุมชนวิกิพีเดีย
kiamlaluno

2
ในอีกด้านหนึ่งฉันคิดว่านี่เป็นหัวข้อที่น่าสนใจ คำแนะนำสำหรับคำถามที่ดีกว่า: "มีรูปแบบการออกแบบที่สามารถแก้ปัญหา X ได้หรือไม่" เพราะนั่นคือสิ่งที่รูปแบบการออกแบบสำหรับการแก้ปัญหาพวกเขาไม่ควรใช้เพียงเพื่อให้พวกเขาใช้
Berdir

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

คำตอบ:


10

ที่เดียวที่จะเริ่มต้นคือด้วยตัวของมันเองและรูปแบบการสัมผัสกับ contrib - เขียนขึ้นดีโดยแลร์รี่การ์ฟิลด์ (Crell) สามารถพบได้ในบทความ Drupal Watchdog

ผู้สังเกตการณ์ผู้เข้าชมและแอบดูทอมส์

จริง ๆ แล้ว Drupal นั้นสร้างขึ้นในรูปแบบคู่ของ Observer และ Visitor แม้ว่าจะไม่ได้เรียกชื่อเหล่านั้นตามชื่อก็ตาม แต่จะเรียกพวกเขาว่า hooks hook_node_load()โดยhook_user_login()นัยแล้วผู้สังเกตการณ์บนโหนดและผู้ใช้ hook_form_alter(), hook_node_view()และอื่น ๆ ที่มีในสาระสำคัญผู้เข้าชม เนื่องจาก Drupal ไม่ได้แยกความแตกต่างระหว่างทั้งสองตะขอบางตัวจึงสามารถพิจารณาได้ทั้งสองรูปแบบ แต่หลักการก็เหมือนกัน

โรงงานและคำสั่ง

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

   function db_insert($table, array $options = array()) {
       // ...
       return Database::getConnection($options['target'])->insert($table, $options);
     }

Database::getConnection()วิธีการเป็นโรงงานที่ส่งกลับที่เหมาะสมวัตถุการเชื่อมต่อสำหรับเว็บไซต์นี้

การพึ่งพาการฉีดของแพทย์ Drupal

ใน Drupal 6 ระบบเมนูถูกเสียใจและเขียนใหม่ให้เป็นกระบวนการหลายขั้นตอน ตอนนี้เราจะใช้การเรียกกลับหน้าเดียวกันเช่นนี้:

   function example_menu() {
       $items['node/%node/example'] = array(
         'page callback' => 'example_page',
         'page arguments' => array(1),
         // ...
       );
       return $items;
     }

     function example_page($node) {
       // Do useful stuff here.
     }

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

ไปหา Broke (r)

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

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