Лучшие практики для создания модулей с использованием классов

19

Я собираюсь начать собирать свои модули как классы теперь, когда lazy / auto-load в Drupal 7, и я хотел бы взглянуть на некоторые модули (contrib или core), которые отлично справляются с этим.

Есть ли творческий способ интеграции класса в качестве хуков? Я реализую каждую функцию как плагин ctools?

Любой прохожий должен заметить, что в D7 появились новые files[]объявления в .infoфайлах модулей для классов / интерфейсов автоматической / отложенной загрузки: Написание файлов .info (Drupal 7.x) .

Следующее является хорошим чтением, чтобы получить мотивацию и структуру (как бы) от сообщества Drupal, программирование Drupal с объектно-ориентированной точки зрения .

electblake
источник

Ответы:

16

Модуль Crell - это не класс , это то, что вы должны прочитать в первую очередь.

Самая большая часть ООП в Drupal 7 - это новый уровень абстракции базы данных (разработанный тем же Crell и другими). Это реализует множество шаблонов, которые можно и нужно использовать повторно.

Например:

Что-то, что все еще обсуждено, является Сокрытием информации . DBTNG реализует это, делая свойства класса защищенными и запрещая прямой доступ. С другой стороны, у нас есть hook_query_alter (), и они могут быть изменены почти свободно с помощью различных методов получения ссылок .

Berdir
источник
отличный ответ, тонны отличных ресурсов для обновления моего мышления при структурировании кода моего модуля!
Electblake
3

Это интересный вопрос.

Идея модуля Drupal как класса очень интересна. Однако даже в модулях D7 просто реализуются функции подключения, которые проверяются по имени, поэтому даже если вы создаете класс для вашего модуля, вам все равно потребуется реализовать функции подключения для их вызова.

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

Джереми Френч
источник
Спасибо за понимание, и я предположил, что мне все еще нужно иметь hook_functions для правильной регистрации в Drupal, но мне любопытно, как модули реализуют это. Я посмотрю на модуль views (и, надеюсь, не потеряюсь) - пожалуйста, обновите свой ответ, если найдете какие-либо более единичные случаи / примеры шаблонов, которые вы найдете: D
electblake
2

Entity API (модуль contrib) позволяет вам объявлять «класс сущности» для каждого из типов ваших сущностей, поэтому весь код, связанный с вашей сущностью (создание, загрузка, сохранение, доступ и т. Д.), Может переходить в класс (см. «Органический»). Группы это делают, например).

Тем не менее, не переусердствуйте. Плагины ctools полезны, когда они вам нужны (вы пишете следующие представления, панели или правила), но использование классов везде просто для идеологической чистоты не принесет вам большой пользы.

Боян Живанович
источник