Jakie wzorce projektowe można znaleźć w najważniejszych modułach?

10

Poza Presentation-Abstraction-kontroli i innych wzorów , które są używane w Drupal rdzenia , czy są jakieś inne wzorce projektowe wyraźnie stosowane w bardziej popularnych przyczyniły modułów , takich jak widoki, CCK i funkcje?

Matt V.
źródło
2
Jak podano w odpowiedzi na najczęściej zadawane pytania : „Powinieneś zadawać tylko praktyczne pytania, na które można odpowiedzieć, w oparciu o rzeczywiste problemy, z którymi się borykasz. Rozmowne, otwarte pytania zmniejszają użyteczność naszej witryny i wypychają inne pytania z pierwszej strony”.
kiamlaluno
1
może to być dobry temat na wiki społeczności
Chaulky
Społeczność Wiki nie jest już używana w przypadku pytań, które są niedopuszczalne lub mają charakter pogranicza. Zobacz Wiki przyszłości społeczności .
kiamlaluno
2
Z drugiej strony uważam, że jest to interesujący temat. Sugestia na lepsze pytanie: „Czy istnieje wzór projektowy, który może rozwiązać problem X?”. Ponieważ do tego służą wzorce projektowe, przy rozwiązywaniu problemu, nie należy ich używać po prostu do ich użycia.
Berdir
1
@kiamlaluno, argumentowałbym, że pytanie nie jest nieodwracalne, gadatliwe lub niepraktyczne, chociaż może być otwarte. Moim celem przy zadaniu pytania jest lepsze zrozumienie, w jaki sposób stosowane są wzorce projektowe w kodzie, który jestem nieco zaznajomiony.
Matt V.

Odpowiedzi:

10

Jednym z nich jest sam rdzeń i wzorce narażone na wkład. - świetny napis Larry'ego Garfielda (Crell) można znaleźć w artykule Drupal Watchdog .

Obserwatorzy, goście i podglądacze

Drupal jest oparty na bliźniaczych wzorcach Obserwatora i Odwiedzającego, chociaż nie nazywa ich po imieniu. Zamiast tego nazywa je hakami. hook_node_load(), hook_user_login()i tak dalej, są w istocie obserwatorami węzłów i użytkowników. hook_form_alter(), hook_node_view()i tak dalej, są w istocie gośćmi. Ponieważ Drupal nie rozróżnia tych dwóch, niektóre haczyki można prawdopodobnie uznać za oba wzory, ale zasada jest taka sama.

Fabryki i polecenia

Istnieje kilka odmian wzorca fabrycznego, ale wszystkie sprowadzają się do tego samego pomysłu: jeden obiekt, klient pyta inny obiekt, fabrykę, o odpowiednią implementację logiki, ale nie dba o to, co to jest . To zależy od fabryki. Rozważ db_insert()funkcję, której ważne bity pokazano poniżej:

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

Database::getConnection()Metoda jest fabryka, która zwraca obiekt połączenia odpowiedniej dla tej strony.

Doktor Drupal Zastrzyk zależności

W Drupal 6 system menu został wypatroszony i przepisany, aby był procesem wieloetapowym. Zaimplementowalibyśmy teraz to samo wywołanie zwrotne strony, jak to:

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

W tej nowej konfiguracji router menu staje się bardziej złożony. Jednak w zamian strona zwrotna pobiera do niej węzeł, od którego zależy, to znaczy wstrzykuje do niej. To daje nam szereg korzyści.

Go for Broke (r)

Jednym z powszechnych podejść jest pewna odmiana pomysłu Brokera lub Mediatora. W tym projekcie obiekt nie żąda informacji od innego obiektu bezpośrednio. Zamiast tego prosi obiekt pośredni, który mógł zostać do niego wstrzyknięty, o złożenie takiego żądania w jego imieniu. Chociaż nadal oznacza to, że pierwszy obiekt musi aktywnie żądać informacji, jest jedynie ściśle powiązany z obiektem mediatora, a nie z niezliczoną liczbą innych obiektów, od których może potrzebować informacji. Oznacza to, że jeśli te inne systemy zmienią się, potrzebujemy jedynie zaktualizować mediatora, a nie każdy system, który go dotknie.

kiamlaluno
źródło