Вопрос

Я закончил читать отличную статью о http://addyosmani.com/largescalejavascript/

В этой статье объясняется, как объединить модули, фасад и посредник вместе для приложения JavaScript.

Я могу кодировать то, что объясняет эта статья, но я не понимаю, зачем мне использовать Facade для доступа к посреднику.

Я думаю, что смогу получить доступ к посреднику прямо из моих модулей.

Пожалуйста, посоветуй мне..

PS: Здесь действительный вопрос?

Это было полезно?

Решение

Справочный материал для этого раздела, Pro JavaScript Design Patterns, очень хорошо отвечает на ваш вопрос, когда он написал следующее:

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

Другие советы

Опираясь на ответ Тедрика Уокера ...

Возьмите это, возможно, смешная, аналогия:

Вы-дятел (модуль), и вы хотели бы выбрать несколько личинок (данные), которые были наложены на структуру поддержки дома (Core). Обычно вы просто бросали (на самом деле дятлы имеют длинный колючий язык, который оборачивается вокруг их черепа) личинки от инфраструктуры, но какой -то плотник (архитектор приложения) применил фасад на внешней стороне дома. Однако плотник был достаточно хорош, чтобы вымощи в фасаде, чтобы позволить Только дятлы Чтобы получить доступ к личинкам. Кроме того, плотник был достаточно умным, чтобы сделать это отверстия Определенная форма-позволяя дятлу выполнять больше задач, получающих личинки, на PECK.

Так зачем снова фасад?

Относительно фасада обратно к сообщению Адди - фасад дополняет Песочница В том, что песочница обеспечивает предопределенную эффективность, которая позволяет одному модулю выполнять задачи определенным образом, например, оптом. Например, вы не хотите, чтобы песочница заставляет пользователя писать:

var node = getNode('#errorPanel'); node.innerHTML = 'Field is invalid!';

У лучшей песочницей может быть что -то вроде:

notifyUser.error('Field is invalid!');

А Фасад с другой стороны, может предоставить эти через пути Точно так же, только слушая mediator.fire('error:Validation', 'Field is invalid!') канал.

Фасад в посте Адди, который я все время использую, теоретически может просто перенаправить запросы на ядро. Возможно, это проверит что -то в канале сигнал Чтобы убедиться, скажем, зяблика не пытается опустить личинки, которые сделают его больным - например, бросьте исключение.

Вот почему Может иметь смысл иметь отдельный канал-средний (т.е. посредник) для вашего ядра, где ваш фасад является единственным «ссылками» на ядро-и ваши модули ссылаются только на фасад. Анкет Другой способ - это применение среди вашей команды Конвенция для дискретные каналы, например mediator.fire('ready://Core') & mediator.fire('updated://ToDos/task', taskId). Анкет А facade послушал бы 'updated://ToDos/task' и сделает запрос (ы) в core - что может выглядеть как-то вроде:

var thus = mediator.installTo(this);
this.on('updated://ToDos/task', function(id){
    thus.fire('request://Core/save/todo', id);
    thus.fire('user://Core/notify/task/added', id);
});
this.on('response://Core/save/todo', function(err, id){
    if(!err){
        // ... success -- notify module!
    } else {
        // ... notify for failure :(
    }
});

ВНИМАНИЕ! делать нет Напишите свои обработчики непосредственно в звонках слушателя!

я В самом деле Надеюсь, это поможет, и что я не буду понижать за разговором о птицах;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top