Persistenza dei dati per le email dei clienti transazionali

3

Sto sviluppando un sistema per gestire l'invio di e-mail transazionali ai nostri clienti. Funziona così:

  1. Un evento si verifica durante il ciclo di vita dell'ordine, ad esempio "spedito"

  2. Questo evento attiverà la creazione di una e-mail nel database (coda e-mail)

  3. Un servizio Windows separato sta interrogando la tabella db per le nuove e-mail da inviare. Quando ne trova uno, chiama un servizio Web con tutti i dati richiesti. È responsabilità del servizio Web gestire l'invio effettivo dell'e-mail.

La mia domanda si riferisce al passaggio 2. Quando si verifica un evento di attivazione della posta elettronica, devo fare uno snapshot di tutti i dati richiesti dal servizio (quindi duplicare dati e introdurre nuove tabelle) o dovrei ottenere i dati richiesti dal db transazionale tabelle solo nel punto in cui sono pronto a chiamare il servizio Web.

[Nota: non sono affatto interessato al corpo dell'email, tutto quello che sto facendo è passare i dati a un servizio Web. I modelli di email ecc sono gestiti da un altro sistema. La mia preoccupazione è solo quella di accodare la notifica e-mail e passare i dati richiesti al servizio Web.]

    
posta user2669338 03.09.2014 - 13:27
fonte

2 risposte

3

In questo caso, avrei serivizzato gli oggetti necessari per passare al servizio web e memorizzarli nel database. I due servizi dovrebbero operare indipendentemente l'uno dall'altro come possono. La serializzazione degli oggetti "guida" completi ti consentirà di aggiornare e regolare il mailer senza dover aggiornare e regolare il listener di eventi.

Potresti anche creare un dato contenente una classe e passare solo le informazioni che ti servono, ma poi fai 3 aggiornamenti laddove ce n'è solo bisogno.

Tuttavia, sembra che la tua costruzione di un sistema molto complesso, che non dovrebbe essere. Supponendo che sia necessario chiamare il servizio Web per inviare una e-mail, allora perché non chiamare il servizio web nel listener di eventi. Se hai bisogno di memorizzare qualcosa nel database, puoi farlo anche nel listener di eventi.

    
risposta data 03.09.2014 - 13:41
fonte
2

Registrare i valori nel punto di attivazione e passare quelli all'e-mailer. Quindi il contenuto della posta sarà coerente.

Per espandere il tuo esempio: un ordine entra nello stato 'spedito' e una email è in coda. Prima che l'email sia inviata, il cliente annulla. L'ordine è ora in stato 'cancellato'. Ora l'email è stata inviata. Quale sarà il suo contenuto "Gentile cliente, il tuo ordine è ora annullato e sarà con te il 5 settembre"? È meno perdonabile della conferma di un ordine che è stato modificato.

    
risposta data 04.09.2014 - 06:00
fonte

Leggi altre domande sui tag