Domanda

Considera i modelli di architettura dell'applicazione aziendale di Martin Fowler e il modello del controller anteriore: http://martinfowler.com/eaacatalog/frontcontroller.htmlApparentemente, usa il modello singleton. Bene, ho un pacchetto di classi nell'applicazione PHP che lavorano insieme (come il pacchetto controller di Zend) e c'è una classe che li rende tutti utilizzabili e poiché ricorda gran parte dei concetti del controller frontale, l'ho chiamato packagename_front. Ma non dovrebbe essere una classe Singleton (al contrario del controller anteriore), quindi ho comunque lasciato che abbia il nome davanti? In caso contrario, come posso chiamarlo? Dal momento che è un pacchetto abbastanza grande, ho solo bisogno che segua le convenzioni il più possibile (non in modo dogmatico!) Quindi sarebbe leggibile per gli altri sviluppatori.

Maggiori informazioni: non è nulla di correlato ai controller. È solo un oggetto che funziona come Zend_Form (che consolida l'uso di tutti gli altri oggetti come ZEND_FORM_ELEMENT_X e ZEND_VALIDATE IN UN OGGETTO) ma non posso solo nominarlo Packagename. Deve essere packagename_something, e non sono solo padre cosa dovrebbe essere qualcosa. Forse "gestore"? ... Voglio solo assicurarmi che quando qualcuno legga il nome, non si confonde sul suo ruolo in tutto il pacchetto :)

È stato utile?

Soluzione

Apparentemente, esso FrontController Usa il modello singleton.

FrontController non deve essere implementato come singleton. Il libro non suggerisce nulla del genere. L'esempio nel libro utilizza un servlet per il gestore.

Solo perché una classe sarà necessaria solo una volta in un'applicazione non giustifica l'implementazione come singleton. Manca lo scopo del singleton che deve imporre Una classe può avere solo un'istanza e Fornisci l'accesso globale ad esso. Se hai bisogno di un'istanza particolare una sola volta, considera Crea solo uno invece.

Molte persone al giorno d'oggi (tra cui Erich Gamma di Fame GOF) vedono il singleton come odore di codice e scoraggiano l'uso. In un'architettura di noto condivisa il singleton può comunque limitare le istanze all'interno della richiesta corrente, quindi l'uso in PHP è limitato. L'accesso globale a un oggetto può essere raggiunto senza il modello singleton, attraverso la parola chiave (malvagia) o metodi statici. L'accesso globale crea sempre un accoppiamento non necessario. Il modo migliore sarebbe quello di utilizzare l'iniezione di dipendenza, che ha l'ulteriore vantaggio di fornire meno accoppiamento e quindi una migliore manutenibilità.

Quindi ho ancora lasciato che abbia il nome davanti? In caso contrario, come posso chiamarlo? Dato che è un pacchetto abbastanza grande, ho solo bisogno che segua le convenzioni il più possibile (non in modo dogmatico!)

Non esiste una tale convenzione sulle classi di denominazione Davanti lezioni a mia conoscenza. Quello che descrivi potrebbe essere un Facciata o a Gateway anche se. Inoltre, sei sicuro di non poter nominare la classe dopo il packagename? Dopo tutto, il Zend_Form Il pacchetto ha un Zend_Form anche classe.

Altri suggerimenti

Solo da una vista puramente design, sembra che tu stia usando quel packagename_front come facciata quando dici:

C'è una classe che li rende tutti utilizzabili

L'implementazione del modello da parte di Fowler dice:

Il controller anteriore consolida tutte le richieste di gestione delle richieste di canalizzazione tramite un oggetto gestore singolo

Ciò insinua che un singleton potrebbe essere usato per implementare la classe di controller anteriore, ma certamente non lo limita a usarlo. Tuttavia, non lo menziona esplicitamente.

Non penso che sia importante se sia un singleton. Si assicura solo che sia l'unico canale per le richieste e avrai usato con successo il modello. :)

L'idea alla base del modello Singleton è assicurarsi che ci sia solo un'istanza di un oggetto che dovrebbe esistere solo in un singolo istanza. Il controller anteriore rientra molto bene in questa categoria, quindi forse sarebbe saggio farlo seguire un modello singleton.

Se, tuttavia, il tuo codice si assicurerà sempre che chiama il costruttore solo una volta, allora c'è spazio per il tuo oggetto pattern non Singleton.

I miei 2 centesimi qui, dal momento che non sono un autore o qualcosa del genere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top