2009-05-08 14 views
11

Ok, ho fatto un po 'di ricerche online e ho trovato il thread this, ma ancora non lo chiarisce bene per me.Front Controller vs. Façade pattern

Qual è esattamente la differenza tra un Pattern controller anteriore e uno schema Façade?

Come ho capito finora: Un modello di facciata non contiene alcuna logica aziendale, ma semplicemente centralizza l'accesso a più oggetti.

Un controller anteriore fa la stessa cosa, ma può contenere la logica aziendale per facilitare la logica decisionale di ciò che viene chiamato in base ai dati di input e simili.

Per dare un senso a questo, il seguente semplicistico frammento di pseudo codice significa che drawLine è una facciata per semplificare la conversione delle coordinate in punti e quindi l'implementazione del metodo di disegno che esegue effettivamente il lavoro?

private void drawLine(Int32 StartX, Int32 StartY, Int32 EndX, Int32 EndY) 
    { 
     Point Start = new Point(StartX, StartY); 
     Point End = new Point(EndX, EndY); 

     Draw(Start, End); 
    } 

Può una facciata rimettere in strati più bassi della vostra applicazione o è in realtà solo di centralizzare l'accesso ai molti componenti sullo stesso livello?

Come ho capito, il front controller coordina il processo di chiamata della funzione completa.

Esempio: un controller Front dovrebbe esaminare i dati e quindi decidere quale azione intraprendere. Quindi compila i dati per ogni chiamata successiva a classi di livello inferiore, finché non arriva a una risposta adeguata che può essere fornita al sistema chiamante.

Penso che la mia comprensione del modello di Façade sia sbagliata o semplicemente troppo semplicistica. Per favore correggimi se sbaglio.

Se la mia comprensione di ciò è corretta, non avrebbe più senso cambiare la facciata dell'applicazione in un controller anteriore nello Microsoft Application Architecture Guide 2.0? Sto specificatamente guardando l'architettura del servizio nel capitolo 18. (Ho la versione Beta 2)

Aggiornamento: Grazie per un'ottima risposta Rune. Perché dici che non è corretto cambiare la facciata in un controller frontale? Sono un grande fan del Front-controller perché mantiene tutte le cose di livello inferiore un po 'più controllate. Quindi, anche se potrebbe non avere più senso, sarebbe completamente sbagliato farlo? Se sì: perché?

risposta

14

Il modello del controller anteriore definisce un singolo componente responsabile dell'elaborazione delle richieste dell'applicazione. Spesso utilizzato come "collo di bottiglia" per (ad esempio) le richieste di canale fino a consolidare il comportamento standard che deve essere eseguito ogni volta.

Vedi questi link per breve le spiegazioni punto:

Una facciata è d'altra parte piuttosto usato per avvolgere altri metodi/servizi per fornire un'interfaccia unificata, nascondere la complessità o ridurre la dipendenza da sistemi esterni (esemplificato nel layer anti-corruzione di DDD: http://www.goeleven.com/blog/entryDetail.aspx?entry=168), ecc.

Una facciata è un involucro sottile che non deve contenere alcuna logica tranne la logica utilizzata per tradurre tra i due sistemi. Il controller anteriore non ha tali requisiti.

si veda ad esempio: http://en.wikipedia.org/wiki/Facade_pattern

E per rispondere alle vostre domande riguardanti AppArchGuide: No, questo non è corretto.

+0

Grazie per l'ottima risposta. Perché dici che non è corretto cambiare la facciata in un controller frontale? Sono un grande fan del Front-controller perché mantiene tutte le cose di livello inferiore un po 'più controllate. Quindi, anche se potrebbe non avere più senso, sarebbe completamente sbagliato farlo? Se sì: perché? – Gineer

7

Il modello di controller anteriore è un architectural pattern (impone una struttura architettonica all'applicazione).

Il modello di facciata, al contrario, è un design pattern (è utilizzato per strutturare una specifica funzionalità dell'applicazione [un modulo] e non impone una struttura sull'intera app).

+0

E il pattern MVC non è il pattern Architectural? –

+0

Penso che "Front Controller pattern" sia un pattern di progettazione software, controlla http://en.wikipedia.org/wiki/Front_controller –

Problemi correlati