Ho una classe LogFormatter
che appare come sotto
@Sl4j
class LogFormatter {
public static String format(String taskType, String taskId, String message) {
return String.format("TaskType: %s, TaskId: %s, Message: %s",
taskType, taskId, message);
}
Per lo più ci sono 4 tipi di compiti ma possono crescere in futuro. La maggior parte delle classi è dedicata a uno dei quattro tipi di attività.
Ora ogni volta, devo ottenere una linea di log, devo chiamare questo logFormatter e una tipica linea di log appare come sotto -
log.info(LogFormatter.format(
"StackOverflowTask",
"StackOverflowId",
"A long long message exceeding 50 characters"));
Ciascuna riga di registro spezza la leggibilità del codice per il lettore. Per lo meno, vorrei mantenere questa linea di log abbastanza breve per una sola riga.
Uno dei modi è quello di consentire in qualche modo al metodo LogFormatter
di chiamare il tipo di attività per salvare la ripetizione in ogni riga.
Ho due percorsi da seguire -
Uno è quello di creare classi separate per ogni tipo di attività come
class StackOverflowTaskLogFormatter extends LogFormatter
o
crea metodi separati come
public void formatStackOverflowTaskLog()
La prima soluzione mi sembra migliore perché posso introdurre più di queste classi senza modificare quelle esistenti (principio Open-Closed) e la firma del metodo format
rimarrà la stessa. Ma non sono ancora contento di scrivere così tante classi e poi molti altri @Autowired
s in ogni classe, creando un bloatware di classe. Inoltre, posso vedere chiaramente che questo tipo di specializzazione aumenta anche la lunghezza della classe / metodo e supera lo scopo originale alla base della loro creazione.
Sono desideroso di capire se ci sono modi migliori per mantenere la leggibilità del codice in situazioni sopra.