Singleton è sufficiente per un EMailUtil o esiste una migliore implementazione? [duplicare]

2

Sto sviluppando un'applicazione, dove devo inviare molte e-mail per creazioni di account utente, convalida, inviti ecc.

Ho implementato una classe statica EMailUtil che ha diversi metodi come

public static void sendInvite(from, to, Subject){...}
public static void sendVerificationCode(from, to, subject, code){...}

Successivamente, ho convertito quella classe in un singleton. Mi stavo chiedendo se c'è un modo per migliorare il mio approccio qui. Quale altro schema potrei usare qui e quale è l'approccio migliore per implementare questa classe di utilità?

    
posta vicky 09.12.2014 - 11:00
fonte

1 risposta

6

Ok, ecco un suggerimento.

Prima di tutto, dovresti eliminare i parametri ripetuti (da, a, soggetto ecc.) e i metodi (sendInvite, sendVerificationCode etc).

Per riuscirci, puoi iniziare con la definizione di una classe EMail che contiene i parametri come attributi. Questo è un approccio abbastanza standard quando si affrontano parametri ripetitivi. Ora tutti gli inviti e le verifiche e simili sarebbero solo istanze di EMail e tutti i messaggi di posta elettronica potrebbero essere inviati utilizzando un solo metodo di invio. Così ti libererai anche dei metodi ripetitivi.

EMail potrebbe essere sottoclasse o fornire metodi di fabbrica per la creazione di tutti i tipi di messaggi. Quindi,

EMail verificationMessage = new VerificationEMail(recipient, verificationCode);

o

EMail verificationMessage = EMail.createVerificationMessage(recipient, verificationCode);

Scelgo il secondo approccio se non porta a una classe EMail eccessivamente gonfia.

Ciò che accade nei campi da e soggetto di un messaggio dovrebbe probabilmente essere deciso nel metodo che sta creando un messaggio di un certo tipo. Tutti i messaggi di verifica dovrebbero probabilmente avere un titolo simile ecc.

Dopo aver definito la struttura dei messaggi hai bisogno solo di un qualche tipo di dispatcher o di tipo per inviarli:

EMailDispatcher dispatcher = new EMailDispatcher();
dispatcher.send(someMessage);

Dispatcher potrebbe avere un solo metodo per inviare messaggi:

public void send(EMail mail);

Cercherò di evitare di avere un metodo di invio statico come il tuo EMailUtil. I metodi statici sono difficili da sostituire per i test unitari e in altro modo. Non vuoi ricevere migliaia di email effettive inviate ogni volta che vengono eseguiti test automatici.

Ora, se stai usando JavaMail-API , allora ha già una Message di classe. Tuttavia potrebbe rivelarsi utile avere la propria classe di messaggi per definire i contenuti e i tipi di messaggi richiesti dall'applicazione e far sì che il dispatcher gestisca l'API Java più tecnica.

    
risposta data 09.12.2014 - 12:50
fonte

Leggi altre domande sui tag