Progettazione: come gestisco gli eventi sugli oggetti persistenti mentre cambiano stato?

StackOverflow https://stackoverflow.com/questions/823763

  •  05-07-2019
  •  | 
  •  

Domanda

Forse una domanda stupida, ma sono uno sviluppatore principiante.

Diciamo che, in un'applicazione CRM'ish basata sui dati, ho un tipo di cliente che può passare attraverso una serie di fasi, ad esempio fasi 1 - 5.

Quando un cliente cambia fase, gli eventi dovrebbero attivarsi. Esempio: quando un cliente accede alla fase 3 dalla fase 2, viene inviata un'e-mail, alcuni elenchi vengono aggiornati e alcuni calcoli vengono eseguiti.

Sto immaginando che un cliente che cambia stato potrebbe essere il risultato di un utente dell'applicazione che aggiorna manualmente il cliente tramite un'interfaccia grafica.

Quindi mi chiedo: dovrei gestirlo affermando che esiste solo un modo per aggiornare lo stato della fase del cliente e quindi assicurare che ogni volta che l'azione viene completata, venga eseguito un elenco di azioni?

Nella mia mente (e scenario) questo significherebbe recuperare un cliente da un database relazionale, aggiornare un campo di fase, perseverare il cliente verso il basso e quindi reagire sempre a questa azione innescando qualsiasi azione registrata come dipendente da quella cambiamento di fase particolare. Tuttavia non sono sicuro che sarebbe intelligente se volessi fare un cambio di fase batch di 10.000 clienti.

Qualche idea a riguardo? Sto davvero cercando qualsiasi tipo di input, supponiamo che io sia completamente all'oscuro.

È stato utile?

Soluzione

Penso che sia OK avere funzioni separate, una per un singolo cambio di fase cliente e un altro per un cambio batch. Quest'ultimo avrebbe o non avrebbe eseguito le azioni aggiuntive, se necessario. Potrebbe anche farlo in un modo più efficiente, o addirittura accodare le azioni, o parte di esse, come l'invio di e-mail, per l'elaborazione in background, se le azioni aggiuntive sono lunghe ed è necessario per completare il cambio di fase in modo tempestivo modo.

Un altro problema si presenta quando il cambio di fase è dovuto al sorgere di alcune condizioni, forse complesse, piuttosto che a un cambio di fase manuale. Quindi è necessario agganciare un controllo delle condizioni da qualche parte nella logica aziendale, abbastanza basso da intercettare tutte le operazioni di aggiornamento che interessano la fase. Ma come hai scritto, non è così poiché nella tua situazione il cambio di fase viene emesso manualmente.

Altri suggerimenti

In molti casi è meglio avere una funzione esplicita nella propria logica aziendale per cambiare la fase. Questo dovrebbe essere l'unico modo per cambiare la fase ed è esplicito. Come " ChangeCustomerPhase (cliente cliente, fase newPhase). Questo rende molto più semplice gestirlo per tenere traccia delle modifiche se tutto può essere modificato liberamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top