Önde gelen katkıda bulunan modüllerde bulunan bazı tasarım modelleri nelerdir?


10

Ayrıca Sunum-soyutlama-kontrol ve diğer desenleri olan Drupal çekirdek kullanılan , göze çarpacak daha kullanılan herhangi diğer tasarım kalıpları vardır popüler katkı modüllerin böyle Views, CCK ve Özelliklere olarak?


2
De bildirildiği gibi sss , "Yalnızca karşılaştıkları gerçek sorunlara dayalı pratik, sorumlu sorular sormalısınız. Konuşkan, açık uçlu sorular sitemizin yararlılığını azaltır ve ön sayfadan başka sorular itin."
kiamlaluno

1
bu iyi bir topluluk wiki konusu olabilir
Chaulky

Topluluk Wiki artık kabul edilemez veya sınırda olan sorular için kullanılmaz. Bkz . Topluluk Wiki'nin Geleceği .
kiamlaluno

2
Öte yandan, bunun ilginç bir konu olduğunu düşünüyorum. Daha iyi bir soru için öneri: "X problemini çözebilecek bir tasarım deseni var mı?". Tasarım kalıplarının nedeni budur, bir problemi çözmek için, sadece kullanılmaları için kullanılmamalıdırlar.
Berdir

1
@kiamlaluno, tartışmasız açık uçlu olsa da, sorunun cevapsız, konuşkan veya pratik olmadığını iddia ediyorum. Soruyu sormamdaki amacım, biraz aşina olduğum kodda tasarım desenlerinin nasıl kullanıldığı hakkında daha iyi bir fikir edinmek.
Matt V.

Yanıtlar:


10

Başlamak için bir yer, çekirdeğin kendisi ve katkıda bulunmak için maruz kalan kalıplardır. - Drupal Watchdog makalesinde Larry Garfield (Crell) tarafından yazılmış harika bir yazı bulabilirsiniz .

Gözlemciler, ziyaretçiler ve gözetleme mezarları

Drupal aslında Gözlemci ve Ziyaretçinin ikiz desenleri üzerine inşa edilmiştir, ancak isimleriyle adlandırmazlar. Bunun yerine, onlara kanca diyor. hook_node_load(), hook_user_login()vb. özünde düğümler ve kullanıcılar üzerindeki gözlemcilerdir. hook_form_alter(), hook_node_view()vb. özünde ziyaretçilerdir. Drupal ikisi arasında ayrım yapmadığından, bazı kancalar her iki desende tartışmalı olarak düşünülebilir, ancak prensip aynıdır.

Fabrikalar ve komutlar

Fabrika modelinde birkaç varyasyon vardır, ancak hepsi aynı fikre kadar kaynar: Bir nesne, bir müşteri, başka bir nesne, bir fabrika, bir mantığın uygun bir şekilde uygulanmasını ister, ancak bunun ne olduğu umrumda değil . Karar vermek fabrikaya kalmış. db_insert()Önemli bitleri aşağıda gösterilen işlevi göz önünde bulundurun :

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

Database::getConnection()Yöntem bu site için bir bağlantı nesnesi uygun düzgün döndüren bir fabrikasıdır.

Doktor Drupal'ın Bağımlılık Enjeksiyonu

Drupal 6'da menü sistemi cesaretlendirildi ve çok adımlı bir işlem olarak yeniden yazıldı. Şimdi aynı sayfa geri aramasını şu şekilde uygulayacağız:

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

Bu yeni kurulumda menü yönlendiricisi daha karmaşık hale geliyor. Ancak, bunun karşılığında, sayfa geri çağrısı, kendisine bağlı olduğu, yani içine enjekte edildiği düğümü alır. Bu bize bir dizi fayda sağlar.

Beş para için git (r)

Ortak yaklaşımlardan biri, Broker veya Arabulucu fikrindeki bazı değişikliklerdir. Bu tasarımda, bir nesne doğrudan başka bir nesneden bilgi istemez. Bunun yerine, kendisine enjekte edilmiş olabilecek bir aracı nesneden kendi adına böyle bir talepte bulunmasını ister. Yine de birinci nesnenin aktif olarak bilgi istemesi gerektiği anlamına gelse de, bilgi istemesi gerekebilecek diğer nesnelerin sayısıyla değil, yalnızca arabulucu nesnesine sıkıca bağlıdır. Bu, diğer sistemlerin değişmesi durumunda, dokunan her sistemi değil, yalnızca aracıyı güncellememiz gerektiği anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.