我想使用各种电子邮件提供商,如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)欢迎任何建议使其成为一个强大的库(我将把它作为开源
稍后)
感谢名单
答案 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)
}
}