Một số mẫu thiết kế được tìm thấy trong các mô-đun đóng góp nổi bật là gì?


10

Ngoài điều khiển trình bày trừu tượngcác mẫu khác được sử dụng trong lõi Drupal , còn có mẫu thiết kế nào khác được sử dụng nổi bật trong các mô-đun đóng góp phổ biến hơn như Chế độ xem, CCK và Tính năng không?


2
Như đã báo cáo trong faq , "Bạn chỉ nên hỏi những câu hỏi thực tế, có thể trả lời được dựa trên những vấn đề thực tế mà bạn gặp phải. Những câu hỏi mở, trò chuyện mở làm giảm tính hữu ích của trang web của chúng tôi và đẩy những câu hỏi khác ra khỏi trang nhất."
kiamlaluno

1
đây có thể là một chủ đề wiki cộng đồng tốt
Chaulky

Wiki cộng đồng không được sử dụng nữa cho các câu hỏi không được chấp nhận hoặc đó là đường biên giới. Xem Tương lai của Wiki cộng đồng .
kiamlaluno

2
Mặt khác, tôi nghĩ đây là một chủ đề thú vị. Gợi ý cho câu hỏi hay hơn: "Có mẫu thiết kế nào có thể giải quyết vấn đề X không?". Bởi vì đó là những mẫu thiết kế dành cho việc giải quyết vấn đề, chúng không nên được sử dụng chỉ để chúng được sử dụng.
Berdir

1
@kiamlaluno, tôi sẽ lập luận rằng câu hỏi không phải là không thể trả lời, trò chuyện hoặc không thực tế, mặc dù nó có thể được cho là kết thúc mở. Mục đích của tôi khi đặt câu hỏi là để hiểu rõ hơn về cách sử dụng các mẫu thiết kế, trong mã mà tôi hơi quen thuộc.
Matt V.

Câu trả lời:


10

Một nơi để bắt đầu là với chính lõi và các mô hình tiếp xúc với đóng góp. - một bài viết tuyệt vời của Larry Garfield (Crell) có thể được tìm thấy trong một bài viết của Drupal Watchdog .

Quan sát viên, du khách và nhìn trộm

Drupal thực sự được xây dựng trên mô hình song sinh của Người quan sát và Người truy cập, mặc dù nó không gọi họ bằng tên. Thay vào đó, nó gọi chúng là móc. hook_node_load(), hook_user_login()và, v.v., về bản chất, là người quan sát trên các nút và người dùng. hook_form_alter(), hook_node_view()và như vậy, về bản chất, là khách truy cập. Bởi vì Drupal không phân biệt giữa hai loại, một số móc có thể được coi là cả hai mẫu nhưng nguyên tắc là như nhau.

Các nhà máy và lệnh

Có một số biến thể trên mẫu Factory, nhưng tất cả đều có cùng một ý tưởng: Một đối tượng, một khách hàng, yêu cầu một đối tượng khác, một nhà máy, để thực hiện một đoạn logic phù hợp, nhưng không quan tâm đó là gì . Đó là tùy thuộc vào nhà máy để quyết định. Hãy xem xét db_insert()hàm, các bit quan trọng được hiển thị bên dưới:

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

Các Database::getConnection()phương pháp là một nhà máy mà trả về một đối tượng thích hợp kết nối cho trang web này.

Bác sĩ phụ thuộc tiêm Drupal

Trong Drupal 6, hệ thống menu được rút ruột và viết lại thành một quá trình gồm nhiều bước. Bây giờ chúng tôi sẽ thực hiện gọi lại trang tương tự như thế này:

   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.
     }

Trong thiết lập mới này, bộ định tuyến menu trở nên phức tạp hơn. Tuy nhiên, đổi lại, cuộc gọi lại trang sẽ nhận được nút mà nó phụ thuộc vào nó, nghĩa là, được đưa vào nó. Điều đó cho chúng ta một số lợi ích.

Đi cho Broke (r)

Một cách tiếp cận phổ biến là một số biến thể về ý tưởng của Nhà môi giới hoặc Người hòa giải. Trong thiết kế này, một đối tượng không yêu cầu thông tin từ đối tượng khác trực tiếp. Thay vào đó, nó yêu cầu một đối tượng trung gian, có thể đã được tiêm vào nó, để thực hiện một yêu cầu như vậy thay mặt cho nó. Mặc dù nó vẫn có nghĩa là đối tượng đầu tiên phải chủ động yêu cầu thông tin, nhưng nó chỉ được liên kết chặt chẽ với đối tượng hòa giải và không phải là vô số các đối tượng khác mà nó có thể cần yêu cầu thông tin từ đó. Điều đó có nghĩa là nếu các hệ thống khác thay đổi, chúng tôi chỉ cần cập nhật hòa giải viên, không phải mọi hệ thống chạm vào nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.