【问题标题】:Design: Emailing System in Java设计:Java 中的电子邮件系统
【发布时间】:2009-05-22 01:58:42
【问题描述】:

我正在为我正在开发的框架构建一个电子邮件系统。到目前为止,我已经有了一个通用的 MailMessage 接口,每种不同类型的电子邮件都将实现它,类似于

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
    ...
}

然后,我得到了一个 SimpleMailMessage,这正是您所期望的接口的简单实现(没有加密或编码,只是纯文本)。

我创建了一个用作抽象工厂的 MailMessageFactory 接口。我有一个 SimpleMailMessageFactory,它实现了工厂来生成 SimpleMailMessage 的实例。

我希望框架发送的一种电子邮件是警报邮件消息,它本质上是普通邮件消息,除了主题行前缀为“[Alert]”(另一种可能是包含“列表”,但我不确定将列表转换为电子邮件字符串的责任在哪里)。我可以继承 SimpleMailMessage 并将 setSubject(String subject) 方法覆盖为类似

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

或者我可以创建一个装饰器:

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);
    }
}

或者我可以委托在 SimpleMailMessageFactory 中添加“[Alert]”字符串。

对我有什么想法?我认为问题在于我可能过于周到和前瞻性,但我想要完美的设计。

【问题讨论】:

    标签: java design-patterns email decorator


    【解决方案1】:

    装饰器对我来说似乎是更好的选择。我在想,您可能还需要在主题行中附加Fwd:Re:,或者您可能需要支持签名,您将在电子邮件正文中添加签名。

    【讨论】:

      【解决方案2】:

      装饰器似乎是更好的选择。但是,您为什么要为 Java 编写自己的电子邮件框架?为什么不直接使用 JavaMail API?

      【讨论】:

      • 以及 JavaMail API 将如何帮助我们装饰我们的消息。我知道我已经将它与 Freemarker 模板一起使用以格式化电子邮件。我认为这个问题就是关于这个的。此外,我相信原始发布者无论如何都会使用相同的 JavaMail API。顺便说一句,没有负面演员。
      【解决方案3】:

      听起来就像 Spring 对 JavaMail 的支持一样。不要重新发明轮子,使用现有的、经过验证的解决方案,并在此基础上进行构建。

      【讨论】:

      • @Chochos 你是对的,但就我而言,我需要提供不同的电子邮件服务提供商,而 Spring 仅限于 javamail 支持的内容。
      猜你喜欢
      • 2016-11-30
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      相关资源
      最近更新 更多