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