La mia app Web genera voci di registro su hook come model.save
. Al momento, ho una classe Entry
(che rappresenta una voce di registro) con un campo stringa content
per contenere il testo della voce di registro.
Esempi di tali voci:
- Voce (contenuto =
'Account 123-456-7890 spending changed to $500/day'
) - Voce (contenuto =
'Account 123-456-7890 paused spending'
)
Il problema principale di questo approccio è che è difficile ricavare il valore semantico da questi oggetti Entry
se content
è solo un campo stringa.
Ad esempio, se voglio scoprire con quale frequenza la spesa di un account viene modificata in media nel mio team , dovrò scrivere alcune regole personalizzate per trovare tutte le voci con il testo 'spending changed to'
e analizzarli. Questo è soggetto ad errori perché il testo può contenere elementi imprevedibili come lettere maiuscole o spazi bianchi.
Poiché la maggior parte delle voci di registro sono generate a livello di codice, mi è venuto in mente che posso usare un enum per rappresentare il contenuto della classe Entry.
Questo significa che l'esempio sopra può essere trasformato nel seguente:
- Voce (content_id = 1, content_args =
"{ account_id: 123-456-7890, value: '500' }"
) - Voce (content_id = 2, content_args =
"{ account_id: 123-456-7890 }"
)
E Content Enum:
class Content(Enum):
1: 'Account {{ account_id }} spending changed to ${{ value }}/day'
2: 'Account {{ account_id }} paused spending'
Con le voci strutturate, l'esecuzione di analisi personalizzate su questi dati diventa molto semplice.
Sono ancora in una fase molto precoce nel progettare questo refactoring. Non sarei sorpreso se ci fossero implementazioni esistenti di questo modello da qualche parte.
Piuttosto che reinventare la ruota, mi piacerebbe vedere come gli altri lo fanno. Esistono già plug-in / strumenti che stanno già implementando questo modello?