Шаблон проектирования с использованием Javascript и PHP - PullRequest
2 голосов
/ 23 августа 2011

Я создаю веб-сайт на PHP, который также имеет элементы Javascript. На этом будет система плагинов, в которой плагин может быть динамически добавлен на сайт.

Я создал систему плагинов, но мне не нравятся некоторые элементы дизайна. В частности, я использую шаблон MVC, но есть проблема с абстракцией javascript.

У меня есть определенный файл, который загружает все плагины. Затем есть файл javascript, который динамически добавляет поля в окно, в зависимости от того, какой выбор был сделан, для какого плагина следует использовать.

В файле js это выглядит так:

 if (SelValue == 'image_list')
   image_list(form_name, new_div, parent_div);

 if (SelValue == 'multiple_columns')
   multiple_columns(form_name, new_div, parent_div);

Затем, прямо внизу, следует объявление imagelist () и так далее. Конечно, это довольно громоздко и, конечно, не похоже на хорошую практику. Мне бы хотелось, чтобы все это было абстрагировано и изолировано, чтобы плагин был простым шагом для добавления в мой код, если это возможно.

Знаете ли вы какие-либо шаблоны проектирования или практики, которые могли бы соответствовать этому сценарию?

Ответы [ 3 ]

2 голосов
/ 23 августа 2011

Вы можете создать объект, содержащий все функции, такие как image_list и multiple_columns.Их использование будет выглядеть следующим образом:

plugins[SelValue](form_name, new_div, parent_div);

Добавление новой функции будет выглядеть следующим образом:

plugins.image_list = function (form_name, new_div, parent_div) {
    /* … */
}

Это определение может быть в другом файле.Это то, что вы имели в виду?

Редактировать: Довольно однофайловая версия:

plugins = {
    image_list: function (form_name, new_div, parent_div) {
        /* … */
    },
    multiple_columns: function (form_name, new_div, parent_div) {
        /* … */
    },
};
plugins[SelValue](form_name, new_div, parent_div);
1 голос
/ 23 августа 2011

Шаблон модуля, вероятно, очень хорошо соответствует вашим потребностям. Этот шаблон в основном будет рассматривать каждый «плагин» как модуль, который сам по себе должен быть полностью функциональным и независимым. Затем у вас есть загрузчик / контроллер модулей, который отвечает за загрузку правильных модулей и позволяет модулям связываться друг с другом.

http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

http://www.yuiblog.com/blog/2007/06/12/module-pattern/

1 голос
/ 23 августа 2011

Если у вас не будет более 2 операторов IF, этого будет достаточно.Однако, если вы собираетесь расширять его (или могли бы предвидеть его расширение), я бы предложил использовать шаблон проектирования Factory / Command.Детали реализации будут включать таблицу или словарь для замены нескольких IF-операторов, которые у вас были бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...