Які моделі дизайну можна знайти у видатних модулях?


10

Окрім презентації-контролю абстракції та інших моделей , які використовуються в ядрі Drupal , чи існують якісь інші шаблони дизайну, які помітно використовуються в більш популярних модулях, таких як Views, CCK та Особливості?


2
Як повідомляється у файлі , "Ви повинні задавати лише практичні, відповідальні запитання на основі актуальних проблем, з якими ви стикаєтеся. Чатливі, відкриті запитання зменшують корисність нашого сайту та відштовхують інші питання з головної сторінки".
kiamlaluno

1
це може бути гарною темою вікі спільноти
Chaulky

Wiki Wiki більше не використовується для питань, які не є прийнятними або є прикордонними. Дивіться майбутнє Wiki Community .
kiamlaluno

2
З іншого боку, я думаю, що це цікава тема. Пропозиція щодо кращого питання: "Чи існує модель дизайну, яка може вирішити проблему X?". Оскільки саме для цього розробляються шаблони дизайну, вирішуючи проблему, їх не слід використовувати лише для того, щоб їх використовувати.
Бердір

1
@kiamlaluno, я б заперечував, що питання не є невідчутливим, балаканим чи непрактичним, хоча, можливо, він може бути відкритим. Моя мета, задаючи питання, - краще зрозуміти, як використовуються шаблони дизайну, в коді, який я дещо знайомий.
Метт В.

Відповіді:


10

Слід почати з самого ядра та шаблонів, що піддаються набору. - чудове написання Ларрі Гарфілд (Крелл) можна знайти у статті про сторожову друкарню .

Спостерігачі, відвідувачі та підглядачі

Drupal насправді побудований на шаблонах близнюків спостерігача та відвідувача, хоча він не називає їх по імені. Натомість це називає їх гачками. hook_node_load(), hook_user_login()і так далі, по суті, спостерігачі за вузлами та користувачами. hook_form_alter(), hook_node_view()і так далі, по суті, відвідувачі. Оскільки Drupal не розрізняє обох, деякі гачки можна, безсумнівно, вважати обома моделями, але принцип той же.

Фабрики та команди

Існує декілька варіацій фабричного шаблону, але всі вони зводяться до однієї і тієї ж ідеї: один об'єкт, клієнт, запитує інший об'єкт, завод, для відповідної реалізації логіки, але неважливо, що це таке . Це вирішувати на заводі. Розглянемо db_insert()функцію, важливі біти якої наведено нижче:

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

Database::getConnection()Метод є завод , який повертає об'єкт підключення , відповідний для цього сайту.

Ін'єкція залежності лікаря Друпала

У 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)

Один загальний підхід - це певна варіація ідеї брокера чи посередника. У цій конструкції об’єкт не вимагає інформації безпосередньо від іншого об'єкта. Натомість він просить посередницький об’єкт, який, можливо, був введений у нього, зробити такий запит від свого імені. Хоча це все ще означає, що перший об'єкт повинен активно запитувати інформацію, він лише щільно пов'язаний з об'єктом-посередником, а не з безліччю інших об'єктів, від яких може знадобитися запитувати інформацію. Це означає, що якщо ті інші системи змінюються, нам потрібно лише оновити посередника, а не кожну систему, яка його торкається.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.