Controllori statici

1

Mi sono costruito un framework MVC PHP per soddisfare le mie esigenze. Poiché quasi tutte le classi principali sono statiche, mi sono imbattuto nell'idea di avere controller statici. So che per qualche motivo le classi statiche non sono percepite bene dai programmatori, tuttavia se una classe non ha senso avere un'istanza, non riesco davvero a vedere alcuna buona ragione per crearne una.

Ad esempio la classe System (b.k.a. App in altri framework) che inizializza l'intero framework include i file di configurazione e chiama il front controller. Non ci possono essere due istanze di questa classe: il sistema viene inizializzato solo una volta. Sì, ha anche altre funzioni, ma nessuna si riferisce a un'istanza: getClientIP , handleException , handleError ecc.

Quindi seguendo lo stesso percorso logico, i miei controllori non hanno proprietà e sono generalmente utilizzati una volta per richiesta. Tuttavia, quando ci penso, non ho mai visto un framework con controller statici. Classi di librerie statiche - sì, ma controller statici - mai. C'è qualche buona ragione per non avere controller statici in un framework MVC?

P.S .: E sì, so che non ci sono ancora classi statiche in PHP, in pratica quello che chiamo una classe statica è una classe con un costruttore privato e solo metodi statici.

    
posta php_nub_qq 23.09.2014 - 23:51
fonte

1 risposta

2

In un sistema di routing complesso, generalmente un controllore dovrebbe essere controllato da un nome che si basa su quale sia il suo lavoro o quale percorso gestisce. Quando l'app si "avvia", si registrano i controller sotto quei nomi in modo che il nome della classe non sia codificato in modo rigido ovunque, consentendo di sostituire facilmente i controller. Questo è ciò che fa la facciata App in Laravel.

Non c'è niente di sbagliato nell'usare classi statiche (abstract con costruttori finali privati) al posto di singleton (personalmente penso che siano preferibili ai singleton), e se sai che il tuo core non crescerà troppo, allora andrà bene. Lo svantaggio è che se vuoi passare al modo più dinamico di farlo, dovrai refactoring.

Un MVC ideale è sottile. Come ha detto il creatore di Laravel, Taylor Otwell, fai attenzione a non insinuarti in un paradigma di "puro MVC". Un servizio web è costituito da più di MVC; MVC è solo un modello, non un'architettura.

    
risposta data 02.10.2014 - 03:34
fonte

Leggi altre domande sui tag