2009-05-22 7 views
0

Je suis en train de construire un système d'emailing pour un framework que je développe. Jusqu'à présent, j'ai une interface MailMessage générique que tout autre type de message mettra en œuvre, quelque chose le long des lignes deConception: Emailing System in Java

public interface MailMessage { 
    public String[] getTo(); 
    public void setTo(String[] to); 
    public String getFrom(); 
    public void setFrom(String from); 
    ... 
    // you can guess the setters/getters here 
    ... 
} 

J'ai alors eu un SimpleMailMessage qui est exactement ce que vous attendez une mise en œuvre simple, de l'interface (pas de cryptage ou d'encodage, juste du texte brut).

J'ai créé une interface MailMessageFactory utilisée comme fabrique abstraite. J'ai un SimpleMailMessageFactory qui implémente l'usine pour produire des instances de SimpleMailMessage. Un type d'email que je voudrais envoyer à l'infrastructure est un message d'alerte, c'est-à-dire essentiellement un message régulier, sauf que "[Alert]" est préfixé à la ligne d'objet (un autre peut être un e-mail contenant un "liste" des éléments de la commande, mais je ne suis pas sûr de la responsabilité de la conversion de la liste en String pour un email. Je peux soit sous-classe le SimpleMailMessage et passer outre la setSubject méthode (String sujet) à quelque chose comme

public class AlertMailMessage { 
    ... 
    public void setSuject(String subject) { 
     this.to = "[Alert]" + to; 
    } 
    ... 
} 

Ou je peux créer un décorateur:

public abstract class EmailDecorator implements MailMessage { 
    protected MailMessage email; 
    ... 
    // delegate all implemented methods to email 
    ... 
} 

public class AlertEmailDecorator extends EmailDecorator { 
    public void setSubject(String subject) { 
     email.setSubject("[Alert]" + subject); 
    } 
} 

Ou je peux déléguer ajouter le « [Alerte] "chaîne dans SimpleMailMessageFactory.

Réflexions sur ce que j'ai? Je pense que le problème est que je pourrais être trop réfléchi et avant-gardiste, mais je veux le design parfait.

Répondre

1

Un décorateur semble une meilleure option pour moi. Je pense à, peut-être vous avez besoin d'ajouter votre ligne d'objet avec, Fwd: ou Re: aussi bien, ou peut-être vous devez soutenir la signature où vous ajouterez une signature au corps d'email.

1

Le décorateur semble être la meilleure option. Cependant, pourquoi écrivez-vous votre propre framework de messagerie pour Java? Pourquoi ne pas simplement utiliser l'API JavaMail?

+0

Et comment l'API JavaMail va nous aider à décorer nos messages. Je sais que je l'ai utilisé avec des modèles Freemarker afin de formater les messages électroniques. Et je pense que cette question est à ce sujet. En outre, je crois que l'affiche originale utiliserait la même API JavaMail, de toute façon. Pas de fonte négative, BTW. –

1

Cela ressemble à la prise en charge de Spring par JavaMail. Ne réinventez pas la roue, n'utilisez pas de solutions déjà existantes et éprouvées et ne vous en approchez pas.

+0

@Chochos vous avez raison, mais dans mon cas, je dois fournir différents fournisseurs de services de messagerie électronique alors que Spring est limité uniquement à ce que supporte javamail. – djunforgetable