Как я знаю, конкретного шаблона нет, но всегда есть вопрос:
- Почему я должен разделить логику и интерфейс моего модуля на несколько модулей?Это действительно необходимо?
Это необходимо, только если вы разработали модуль, который может принимать различные пользовательские интерфейсы, такие как представления и простые представления .ИМО нет другой причины для этого.
Хорошо, если предположить, что нашему модулю нужна вещь _ui
.Здесь в качестве примера я пытаюсь разделить основные функциональные возможности модуля и его интерфейс настройки.Взгляните на Модуль API развертывания , это довольно крошечный и простой модуль, который подходит для нашего случая.Вот $ tree ./unfuddle_api
:
unfuddle_api/
|-- LICENSE.txt
|-- README.txt
|-- unfuddle_api.classes.inc
|-- unfuddle_api.info
|-- unfuddle_api.install
|-- unfuddle_api.module
0 directories, 6 files
Прочитайте его код!unfuddle_api.install
не устанавливает схему, но реализует hook_uninstall()
для удаления нескольких переменных, используя variable_del()
при удалении модуля.Эти переменные на самом деле являются параметрами соединения API, которые будут установлены на странице администратора модуля, некоторые из них могут быть и в вашем модуле.
IMO это часть, которую нужно перенести на unfuddle_api_ui
module.
Файл unfuddle_api.classes.inc
является классом-оболочкой API для развертывания , это каким-то образом сторонний код, заключенный в класс, который будет использоваться для создания экземпляра объекта.
ИМО это должно остаться в основном модуле.Но ради дизайна мы должны изменить метод конструктора, удалив вызовы variable_get()
и установив переданные параметры прямо в свойства класса.Мы добавим их позже в файл .module
.
Файл unfuddle_api.module
содержит основной код модуля. Реализация hook_perm()
плюс один для hook_menu()
для создания страницы администратора ивспомогательная функция с именем unfuddle_api_create()
, которая каким-то образом является вспомогательной Factory для создания объекта из Unfuddle
класса, закодированного в unfuddle_api.classes.inc
.
IMO, обе реализации ловушек должны быть перенесены на *Модуль 1051 *.Также удаленная variable_get()
часть unfuddle_api.classes.inc
, описанная выше, должна быть добавлена здесь в unfuddle_api_create()
функцию .
Итак, в общих чертах: у нас есть модуль unfuddle_api
, который действует как оболочка для класса API Unfuddle
.Он предоставляет нам все функциональные возможности, но не настраивает пользовательский интерфейс.Все конфиги должны быть установлены через модуль unfuddle_api_create()
в коде.
Также у нас есть модуль unfuddle_api_ui
, который зависит от модуля unfuddle_api
и, если он будет включен, предоставит нам конфигурацию основного модуля в пользовательском интерфейсе.
Надеюсь, это поможет.