Как использовать Стратегию и другие для отправки электронной почты - PullRequest
0 голосов
/ 16 сентября 2011

Я хочу использовать различные почтовые провайдеры, такие как GMail, mailgun, mailchimp и т. Д., И создать библиотеку для использования.Эти провайдеры разрешают отправлять электронные письма, используя SMTP, HTTP Post,
API на основе REST и т. Д. В настоящее время я определил следующие интерфейсы

interface IEmailSendStrategy // how to send email like SMTP , REST , HTTP Post etc ??
{
   void Send(IEmailSender sender);
}
interface IEmailSender      // provider like GMail , mailchimp, mailgun
{
    void SendEmail(ISendStrategy strategy, System.Net.Mail.Message message)
}

и некоторые классы, реализующие эти интерфейсы

class SMTPStrategy : IEmailSendStrategy
{
    void Send(IEmailSender sender){ // code to send }
}
class GMailSender : IEmailSender
{
    void SendMail(ISendStrategy strategy, System.net.Mail.Message message){ // code }
}

Теперь мой вопрос

1) Является ли это хорошим подходом для разработки EmailLib, каких-либо ошибок или неправильного дизайна здесь?

2) Как я могу поместить больше данных в эти классы в DesignPattern-Way

(например, имена пользователей, pwds, порты, SSL или нет, AUthentication для REST и т. Д. И т. Д. *

Я думал об IData и использую конкретные классы для этих IData (например, SMTPData,и т. д.)

, но у каждого может быть свой тип SMTPData (для gmail требуется SSL, другой порт, может использоваться

некоторая аутентификация MD5 и т. д. и т. д.)

3) Приветствуются любые предложения, чтобы сделать эту библиотеку надежной (позже я опубликую ее как открытый источник

)

Thanx

1 Ответ

0 голосов
/ 16 сентября 2011

Для меня я не обязательно вижу смысла в разделении ISendStrategy и IEmailSender. Я бы посоветовал вам подумать, как вы собираетесь использовать код. Кратко подумав об этом, я бы предложил, чтобы одного интерфейса было достаточно. Возможно, что-то вроде этого ...

public interface IEmailService {
    public Send(IAuthenticationDetails details, IMessage message)
}

public class GMail : IEmailService {
    public GMaily() { //... }
    public Send(IAuthentication details, IMessage message) {
        //...
    }
}

public class AnotherClasss {
    public void AMethodToSendEmail(...) {    
       // use factory or container to get instance of strategy
       strategy.Send(details, message)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...