Qual è l'approccio migliore per scrivere le voci di cronologia su determinate azioni in ASP.NET Core MVC?

0

Sto lavorando a un prodotto software che prevede che gli utenti aprano un caso e intraprendano azioni per elaborare il caso, cambiando lo stato, creando attività, ecc. Vorrei fornire una cronologia delle azioni intraprese per elaborare il caso sotto forma di voci di cronologia. Sto cercando di evitare che i miei controller diventino troppo grassi e stia cercando di utilizzare un approccio in cui utilizzo i filtri di azione e decorare le azioni che richiedono una voce di cronologia, tuttavia stavo cercando di riportare le voci di cronologia a Case / CaseID .

Attualmente non ho un ID maiuscolo memorizzato da nessuna parte che i filtri azione possano utilizzare, il caseID è in genere un parametro dell'azione MVC insieme a qualsiasi altro dato di elaborazione necessario. Quindi le mie domande sono:

  1. Devo usare anche filtri di azione per questo, o dovrei semplicemente creare una classe di servizio che gestisca la scrittura di voci di cronologia nel database ed effettuare chiamate alla fine di ogni metodo di azione dopo che l'azione è stata completata con successo ?

  2. Se i filtri di azione sono l'approccio giusto qual è la migliore pratica per rendere disponibile CaseID al filtro azione? [ChronologyActionFilterFactory(ActionTitle = nameof(TaskChronologyActionsEnum.TaskCreated), ActionNotes = "")] Non riesco a rendere CaseID disponibile nella decorazione perché in genere ha un ambito locale per il metodo di azione. Alcuni approaches ho pensato di compilare una variabile di sessione quando il caso è aperto, impostare una variabile a livello di controller o impostare una variabile a livello di controller di base.

Alla ricerca di alcune raccomandazioni, no quale sarebbe l'approccio migliore per implementare questo tipo di funzionalità.

    
posta Hunter Nelson 15.10.2018 - 17:29
fonte

1 risposta

2

I'm trying to avoid having my controllers get too fat

È ammirevole, ma se stai sostituendo un metodo di registrazione a 1 riga nel corpo di ciascun metodo di azione con un attributo ActionFilter a una sola riga, non stai affatto riducendo il grasso dei controller. Come hai notato, il problema con ActionFilters è che non hai accesso all'intero intervallo di variabili che stanno entrando nel metodo in fase di runtime. Tutto il resto che potresti fare per spingere CaseId su ActionFilter sarà più complesso della semplice aggiunta della funzione di registrazione a ciascun corpo del metodo Action.

    
risposta data 17.10.2018 - 18:41
fonte

Leggi altre domande sui tag