Опираясь на ответ Тедрика Уокера ...
Возьмем эту, возможно, нелепую аналогию:
ВЫ - дятел (модуль), и вы хотели бы выбрать некоторых личинок (данные), которые были пролежали на опорно-структуре, Хауса (ядро).Обычно вы просто клюете (на самом деле дятлы имеют длинный заостренный язык, обвивающий их череп) личинками инфраструктуры, но какой-то плотник (Application Architect) применил Фасад снаружи дома.Однако плотник был достаточно хорош, чтобы тыкать отверстия на Фасаде, чтобы только дятлы могли получить доступ к личинкам.Кроме того, плотник был достаточно умен, чтобы придать этим отверстиям определенную форму, позволяя дятлу выполнять больше задач по поеданию личинок за пек.
Так зачем нужен фасад,снова?
Относительно Фасада обратно к посту Адди - Фасад увеличивает Песочницу в том смысле, что песочница обеспечивает предопределенную эффективность, которая позволяет одному модулю выполнять задачи определенным образом, напримероптовая.Например, вы не хотели бы, чтобы песочница заставляла пользователя писать:
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 :(
}
});
ВНИМАНИЕ! делайте не пишите свои обработчики непосредственно в вызовах ваших слушателей!
I действительно надеюсь, что это поможет, и что я не разочарован в разговорах о птицах;)