2011-09-16 73 views
0

我想使用各種電子郵件提供商如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路

(如用戶名,殘疾人士,港口,SSL與否,身份驗證REST等等...

我想到IData的和使用的具體類爲那些IData的(如SMTPData,等等。)

但每一個可能有它自己的類型SMTPData(Gmail的需要SSL,不同的端口,可以使用

一些MD5認證等等)

3)任何建議,歡迎,使這個強大的庫(我會把它作爲開源

以後)

感謝名單

+0

你可以使用提供者機制來設計你的發件人。從ProviderBase創建一個類EmailProviderBase,然後創建能夠實現具體功能的繼承類。然後創建一個EmailServicedClass,它將從.config或直接從代碼加載適當的提供程序。 – mishau

回答

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) 
    } 
} 
+0

所以說我想要做的兩件事情 發送使用MailGun和他們的SMTP設置 郵件發送使用MailGUn與他們的REST API 電子郵件使用Gmail和SMTP設置發送郵件 怎麼可以使用這些接口,並說類(大致) Thanx – Jakkamma

相關問題