Questa è una continuazione di questa domanda di revisione del codice .
Ciò che è stato sottratto a quel post e altri aspetti del design orientato è difficile da eseguire il debug. Per contrastare ciò, ho implementato la possibilità di attivare il tracciamento degli schemi di progettazione. Girare traccia su funziona come:
//This can be added anywhere in the code
Run::setAdapterTrace(true);
Run::setFilterTrace(true);
Run::setObserverTrace(true);
//Execute the functon
echo Run::goForARun(8);
Nel log attuale con la traccia attivata, viene visualizzato in questo modo:
adapter 2012-02-12 21:46:19 {"type":"closure","object":"static","call_class":"\/public_html\/examples\/design\/ClosureDesigns.php","class":"Run","method":"goForARun","call_method":"goForARun","trace":"Run::goForARun","start_line":68,"end_line":70}
filter 2012-02-12 22:05:15 {"type":"closure","event":"return","object":"static","class":"run_filter","method":"\/home\/prodigyview\/public_html\/examples\/design\/ClosureDesigns.php","trace":"Run::goForARun","start_line":51,"end_line":58}
observer 2012-02-12 22:05:15 {"type":"closure","object":"static","class":"run_observer","method":"\/home\/prodigyview\/public_html\/public\/examples\/design\/ClosureDesigns.php","trace":"Run::goForARun","start_line":61,"end_line":63}
Quando le informazioni sono suddivise, i dati si traducono in:
- Chiamato da un adattatore o filtro o osservatore
- La funzione chiamata era una chiusura
- La posizione della chiusura
- Classe: metodo in cui l'adattatore è stato implementato su
- La traccia di dove il metodo è stato chiamato da
- Avvia linea e fine riga
Il codice ha dimostrato di funzionare in ambienti di produzione e presenta vari esempi da implementare, quindi la dimostrazione del concetto esiste. Non è DI e realizza cose che DI non può. Non chiamerei il codice boilerplate ma lo chiamerei gonfio. In sintesi, i punti deboli sono il codice gonfiato e una curva di apprendimento in cambio della funzionalità orientata all'aspetto.
Al di là della normale paura di qualcosa di nuovo e diverso, quali sono altri punti deboli in questa implementazione del design orientato all'aspetto, se esiste?
PS: altri esempi di AOP qui: link