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


10

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

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

Faccio un errore nell'uso del 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 accedere utilizzando solo ascoltatori e osservatori, dovrò sicuramente aggiungere e migliorare osservatori e ascoltatori del programma.

PS2. So sicuramente che ci sono diverse librerie per il log in Java e sto usando java.utils.logging ma ho bisogno di un wrapper per poter registrare i miei oggetti speciali.


2
Java ha già 17 framework di logging e framework di meta-logging (slf4j) e probabilmente qualche framework di meta-meta-logging e nessuno di loro funziona per te?
Kevin Cline,

Risposte:


15

Loggingviene solitamente implementato con il modello Catena di responsabilità . Ovviamente puoi (e vorrei) combinarlo con una facciata . Non userei davvero Listener (s) o Observer (s).

Catena di responsabilità - Logger


In pratica sta dicendo "scrivi nel tuo logger astratto nel tuo codice"? Immagino che la mia domanda sia: dovrei innescare eventi da dove voglio registrarmi e fornire un ascoltatore che accede in risposta agli eventi, o dovrei chiamare direttamente il mio servizio Logger (che utilizza la catena di responsabilità internamente) e il gioco è fatto?
Fire-Dragon-DoL

8

Utilizzare la programmazione orientata all'aspetto che utilizza i consigli After, Before e Around sui metodi. Lì, 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.


0

Bene, Observer mi sembra inadatto. Inoltre, lanciare le chiamate del logger "ovunque sia necessario" frantumerà il codice e violerà l'SRP.

Ad esempio, potresti essere interessato ad AOP per questo, quindi puoi allegare le chiamate del logger tramite le annotazioni del metodo.


0

La catena di responsabilità sembra essere un buon modello quando l'output può atterrare in più punti. In UML hai un logger diverso che indirizza alla console, l'altro al file error e al 3o semplicemente logger informazioni.

Di solito ho visto che logLevels è diverso ma il file di registrazione è lo stesso.

Non vedo il modello di osservatore così male per la registrazione in quanto disaccoppia il codice di registrazione dal codice dell'applicazione. Che è una buona pratica, la migrazione a diversi meccanismi di registrazione è facile in questo modo. Ogni volta che si desidera registrare, attivare un evento e il listener 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 separare il nostro codice di registrazione dal codice dell'applicazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.