Pregunta

He terminado de leer un gran artículo en http://addyosmani.com/largescaleJavascript/

Este artículo explica cómo combinar módulos, una fachada y un mediador juntos para una aplicación JavaScript.

Puedo codificar lo que explica el artículo, pero no entiendo por qué necesito usar fachada para acceder al mediador.

Creo que puedo acceder al mediador directamente desde mis módulos.

Por favor aconsejame..

PD: ¿Es una pregunta válida aquí?

¿Fue útil?

Solución

El material de referencia para esa sección, Patrones de diseño Pro JavaScript, responde a su pregunta bastante bien cuando dice lo siguiente:

Las fachadas nunca son estrictamente necesarias. Las mismas tareas se pueden completar sin ellas. Este es un patrón organizacional; Le permite modificar las interfaces de clases y objetos para que sean más convenientes para usted.

Otros consejos

Construyendo sobre la respuesta de Theedric Walker ...

Tome esto, quizás ridículo, analogía:

Usted es un pájaro carpintero (módulo), y le gustaría elegir algunas larvas (datos) que se han mantenido en la estructura de soporte de una casa (núcleo). Normalmente, solo picotearías (en realidad los pájaros carpinteros tienen una lengua larga y de púas que se envuelve alrededor de su cráneo) las larvas de la infraestructura, pero algún carpintero (arquitecto de aplicaciones) ha aplicado una fachada en el exterior de la casa. Sin embargo, el carpintero fue lo suficientemente agradable como para hacer agujeros en la fachada para permitir Solo pájaros carpinteros Para acceder a las larvas. Además, el carpintero era lo suficientemente inteligente como para hacer estos agujeros Una determinada forma, lo que permite que el pájaro carpintero realice más tareas que comen larvas por picoteo.

Entonces, ¿por qué tener una fachada, nuevamente?

Relacionando la fachada con la publicación de Addy: la fachada aumenta un Salvadera En eso, un sandbox proporciona eficacia predefinidas que permiten que un módulo realice tareas de manera específica, por ejemplo, al por mayor. Por ejemplo, no querría una caja de arena que obliga al usuario a escribir:

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

Una mejor caja de arena puede tener algo como:

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

los Fachada Por otro lado, puede proporcionar a los que rango lo mismo, solo escuchando el mediator.fire('error:Validation', 'Field is invalid!') canal.

La fachada en la publicación de Addy, que uso todo el tiempo, en teoría, podría simplemente reenviar las solicitudes al núcleo. Probablemente, verificaría algo en el canal señal Para asegurarse, por ejemplo, un pinzas no está tratando de picotear larvas que lo enfermarán, por ejemplo, lanza una excepción.

Esta es la razón por Puede tener sentido tener un canal medio separado (es decir, mediador) para su núcleo, donde su fachada es el único 'referente' al núcleo, y sus módulos solo hacen referencia a la fachada. Otra forma es hacer cumplir entre su equipo una convención para nombres de canales discretos, p.ej mediator.fire('ready://Core') & mediator.fire('updated://ToDos/task', taskId). los facade escucharía 'updated://ToDos/task' y haría solicitud (s) a la core - que puede verse algo así como:

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 :(
    }
});

¡ATENCIÓN! hacer no ¡Escribe tus manejadores directamente dentro de las llamadas de tu oyente!

yo De Verdad Espero que esto ayude y que no me voten por hablar de pájaros;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top