Quale modello di progettazione è più adatto per la registrazione?

9

Dovrei registrare alcuni eventi in un programma, ma per quanto ne so sarebbe meglio mantenere il codice di logging al di fuori del programma perché non si tratta della reale funzionalità del programma. Quindi potresti dirmi se dovrei tenerlo completamente fuori codice e usare solo osservatori e ascoltatori per registrare gli eventi? Oppure posso aggiungere una riga di codice simile alla seguente ovunque sia necessario registrare qualcosa:

MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99));

Ho sbagliato ad usare il modello di progettazione di Observer? Ho bisogno di un altro modello di progettazione? O dovrei smettere di pensare ai modelli di design?

PS1. Se voglio registrare usando solo ascoltatori e osservatori, dovrò sicuramente aggiungere e migliorare gli osservatori e gli ascoltatori del programma.

PS2. Sicuramente so che ci sono diverse librerie per l'accesso a Java e sto usando java.utils.logging ma ho bisogno di avere un wrapper per registrare i miei oggetti speciali.

    
posta user1892555 12.12.2013 - 09:43
fonte

4 risposte

14

Logging viene in genere implementato con il modello Chain of responsibility . Certo che puoi (e vorrei) combinarlo con una Facciata . Io davvero non userei Listener (s) o Observer (s) me stesso.

    
risposta data 12.12.2013 - 09:49
fonte
8

Utilizza Programmazione orientata agli aspetti che utilizza i consigli di After, Before and Around sui metodi. Qui, secondo le tue necessità, puoi aggiungere i log prima dell'inizio di api, dopo o in alcune condizioni e anche separare il tuo codice principale dal codice di registrazione.

    
risposta data 12.12.2013 - 09:48
fonte
0

Bene, l'osservatore sembra non adatto a me. Inoltre, lanciare le chiamate del registratore "ovunque sia necessario" frantuma il codice e viola l'SRP.

Potresti, ad esempio, essere interessato ad AOP per questo, quindi puoi allegare le chiamate registratore tramite annotazioni sui metodi.

    
risposta data 12.12.2013 - 09:48
fonte
0

La catena di responsabilità sembra essere un buon modello quando il tuo output può atterrare in più punti. In UML hai un logger diverso uno che indirizza alla console, l'altro a errorFile e il terzo semplicemente logger di informazioni.

Di solito ho visto che i logLevel sono diversi ma il file di registrazione è lo stesso.

Non vedo lo schema dell'osservatore come negativo per la registrazione poiché disaccoppia il codice di registrazione dal codice dell'applicazione. È una buona pratica, la migrazione a diversi meccanismi di registrazione è semplice in questo modo. Ogni volta che si desidera accedere, generare un evento e l'ascoltatore appropriato riceverà l'evento e lo registrerà. Dovrebbe esserci un oggetto singleton intermedio che contiene l'elenco di tutti i registri.

In questo modo vedo che possiamo disaccoppiare il nostro codice di registrazione dal codice dell'applicazione.

    
risposta data 09.11.2014 - 22:27
fonte

Leggi altre domande sui tag