Srikanth ha una buona risposta. Mi piacerebbe approfondire l'alternativa, però. Supponiamo di avere questa gerarchia URL semplice:
/gallery
/blog
/admin/login
/admin/newpost
Se questo è implementata con i controller pagina (PHP, per esempio), sia gallery.php
e blog.php
sarà necessario includere alcune common.php
all'inizio (o nelle vicinanze). Tuttavia, sia login.php
che newpost.php
possono includere admin-common.php
, che a sua volta inserisce "common.php" e esegue "/ admin /" - impostazioni specifiche, come la verifica che l'utente sia autenticato.
In generale, se si dispone di una gerarchia di URL, risulta molto simile agli alberi di ereditarietà degli oggetti. Tranne che utilizzare l'ereditarietà a livello di lingua, stai ereditando l'ambiente di qualsiasi cosa tu sia foo-common.php
che includi.
Non riesco a immaginare come un front controller aumenti la testabilità, alla fine sono necessari gli stessi test di un utente-utente HTTP automatizzato, indipendentemente dall'implementazione.
Uno dei principali svantaggi dei controller di pagina è che rende la tua applicazione web dipendente dal suo ambiente di hosting.Inoltre costringe i tuoi sviluppatori a "vedere" la stessa struttura degli utenti finali, ma ritengo che sia una buona cosa, considerando il numero di siti che vedo avere URL assolutamente atroci.
"Non è possibile ridimensionare un'applicazione utilizzando un front controller." Questo sembra evidente solo per il modo in cui è necessario mappare l'URI alle classi, ma quanto è migliore l'esecuzione del PHP non elaborato una volta che l'accesso ai dati e l'I/O sono stati considerati? –
@FredWilson Il mio punto sul ridimensionamento è che se si utilizza un front controller significa che ogni richiesta va a un singolo punto di ingresso su tutti i server. Se si dispone di punti di ingresso separati per ogni parte di un'applicazione, è possibile ridimensionare ciascun pezzo singolarmente, ad es. un'applicazione di posta elettronica: potresti destinare più server a read-email.php che send-email.php in quanto le persone generalmente leggono le e-mail più frequentemente rispetto a quelle inviate. Questo non può essere raggiunto con un front controller, dovresti scalare tutte le eventualità insieme. – Pete
Questa informazione è ancora pertinente? Framework come Laravel, Zend Framework, Expressive e molti altri sembrano utilizzare esclusivamente il pattern del front controller e il routing direct-to-file viene chiamato "obsoleto" .. (https://stackoverflow.com/questions/48079853/what- sono-queste-instradamento stili cd-in-a-web-application? noredirect = 1 # comment83133888_48079853) – Dennis