Краща практика побудови модулів за допомогою класів


19

Я хочу почати будувати свої модулі як класи зараз, коли ледачий / автозавантажений в Drupal 7, і я хотів би подивитися на деякі модулі (contrib або core), які роблять велику роботу з цим.

Чи є творчий спосіб інтегрувати клас як гачки? Чи реалізувати кожну функцію як плагін ctools?

Будь-який перехожий повинен зазначити, що D7 має нові files[]декларації у .infoфайлах модулів для класів / інтерфейсів для автоматичного завантаження / лінивого завантаження: Написання файлів .info (Drupal 7.x) .

Нижче наведено хороше прочитання, щоб отримати мотивації та конституцію (як би) від програми спільноти Drupal Drupal з об'єктно-орієнтованої точки зору .

Відповіді:


16

Crell - це не модуль, який слід прочитати першим.

Найбільша частина OOP в Drupal 7 - це новий рівень абстракції бази даних (розроблений самим Крелом та іншими). Це реалізує багато моделей, які можна і потрібно повторно використовувати.

Наприклад:

Те, що все ще обговорюється суперечками, - це приховування інформації . DBTNG реалізує це, роблячи захищені властивості класу та забороняючи прямий доступ. З іншого боку, у нас є гак_query_alter (), і їх можна практично вільно змінювати різними методами довідкового геттера .


чудова відповідь, багато чудових ресурсів для оновлення мого мислення при структуруванні мого модульного коду!
electblake

3

Це цікаве питання.

Ідея модуля Drupal як класу дуже цікава. Однак навіть у модулях D7 просто реалізувати функції гака, які перевіряються на ім'я, тому навіть якщо ви створюєте клас для свого модуля, вам все одно знадобиться реалізувати функції гака, щоб викликати їх.

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


Дякую за розуміння, і я припускав, що мені все одно потрібно мати гакові функції, щоб зареєструватися належним чином в Drupal, але мені цікаво, як модулі реалізують це. Я погляну на модуль переглядів (і, сподіваюся, не загубиться) - будь ласка, оновіть свою відповідь, якщо ви знайдете більше відокремлених випадків / прикладів знайдених моделей: D
electblake

2

API Entity (модуль contrib) дозволяє оголосити "клас сутності" для кожного з типів вашої сутності, тому весь код, пов'язаний з вашою сутністю (створення, завантаження, збереження, доступ тощо), може переходити до класу (дивіться, як Organic Групи це роблять, наприклад).

Це сказало, не перестарайтеся. Плагіни ctools - це хороша річ, коли вони вам потрібні (ви пишете наступні перегляди, панелі чи правила), але використання класів скрізь лише для ідеологічної чистоти не принесе вам великої користі.

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