2013-02-26 8 views
10

Sono abbastanza confuso.Cercando di capire perché i molti metodi statici di Laravel non sono considerati una cattiva pratica

Ho chiesto ad alcuni sviluppatori su Reddit di rivedere i miei codici. Sembra così

Template::load('register', array('error_message' => Language::translate('username_in_use')); 

Quindi carica register.php, sostituisce {error_message} con la traduzione. (Siamo spiacenti, questo nome utente è in uso. Si prega di scegliere un altro.)

Hanno detto che usare troppe chiamate statiche è una cattiva pratica. Tuttavia suggeriscono il framework di Laravel, che elimina completamente $ this e usa le chiamate statiche.

Qualcuno può spiegarmi come mai se questa è una pratica sbagliata, Laravel è un quadro di classe?

+2

nessuna pratica è buona o cattiva, c'è un tempo e un luogo per tutto –

+1

Test delle unità questo sarebbe un dolore giusto. Questa è una delle ragioni per cui sono considerate cattive qui. Ma è anche leggibile e conciso. –

risposta

28

Lo stato statico è onnipresente e distrugge completamente la testabilità poiché non è possibile ripristinare lo stato. Inoltre, qualsiasi cosa potrebbe influenzare lo stato in modi che altri aspetti del codice non possono prevedere, con il conseguente potenziale di comportamenti selvaggiamente imprevedibili.

Laravel 4 impedisce questo utilizzando le "facciate" statiche. Queste facciate sono "sintattiche per la risoluzione IoC". Forniscono sia zucchero sintattico che prevenzione del codice strettamente accoppiato.

Le classi risolte dalle facciate possono essere modificate e consentono di iniettare sistemi di simulazione o qualsiasi altra cosa si desideri.

Ovviamente, questo non risolve l'altro aspetto dell'accesso statico. In altre parole, non è possibile iniettare funzionalità diverse. Tuttavia, con le applicazioni Laravel generalmente non hai un uso di facciata nel tuo dominio. È più per il livello di trasporto web, in cui è molto utile poiché il livello di trasporto web è già strettamente associato al tuo framework, ma fa un buon uso di questo fatto creando qualcosa di simile a un DSL per quel livello della tua applicazione.

Ripeto, per favore considera di non usare le facciate nel tuo livello di dominio.

Problemi correlati