如何使用策略和其他人进行电子邮件发送

时间:2011-09-16 07:24:23

标签: c# email design-patterns

我想使用各种电子邮件提供商,如GMail,mailgun,mailchimp等    并创建一个要使用的库。这些提供商允许使用SMTP,HTTP Post,发送电子邮件    基于REST的API等。目前我已经定义了以下接口

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与否,REST身份验证等等......

我想到了IData,并为那些IData使用具体的类(如SMTPData等)。

但每个人都有自己的SMTPData类型(gmail需要SSL,不同的端口,可以使用

一些MD5认证等等)

3)欢迎任何建议使其成为一个强大的库(我将把它作为开源

稍后)

感谢名单

1 个答案:

答案 0 :(得分:0)

对我来说,我不一定看到拆分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)
    }
}