Дизайн: Система электронной почты на Java - PullRequest
0 голосов
/ 22 мая 2009

Я создаю систему электронной почты для фреймворка, который разрабатываю. До сих пор у меня есть общий интерфейс 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, которое по сути является обычным почтовым сообщением, за исключением префикса «[Alert]» в строке темы (другим может быть электронное письмо, содержащее list "элементов заказа, но я не уверен, куда ложится ответственность за преобразование списка в строку для электронной почты). Я могу либо создать подкласс 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);
    }
}

Или я могу просто делегировать добавление строки "[Alert]" в SimpleMailMessageFactory.

Мысли о том, что у меня есть? Думаю, проблема в том, что я могу быть слишком вдумчивым и дальновидным, но я хочу идеальный дизайн.

Ответы [ 3 ]

1 голос
/ 22 мая 2009

Декоратор кажется лучшим вариантом для меня. Я думаю о том, может быть, вам нужно добавить строку темы, Fwd: или Re:, или вам может потребоваться поддержка подписи, когда вы будете добавлять подпись в тело письма.

1 голос
/ 22 мая 2009

Звучит так же, как поддержка SpringMail для SpringMail. Не изобретайте велосипед, используйте уже существующие, проверенные решения и опирайтесь на них.

1 голос
/ 22 мая 2009

Декоратор кажется лучшим вариантом. Однако почему вы пишете свой собственный почтовый фреймворк для Java? Почему бы просто не использовать API JavaMail?

...