问题描述
我想实现一个微服务来使用回退客户端发送电子邮件,因此如果第一个客户端 (SendGrid) 出现故障,我将调用第二个客户端 (MailJet),下面的代码展示了这个想法。
问题是:有没有办法使用一些 .net 核心功能而不是初始化新对象来改进 Main 函数?关键是我想遵循 SOLID 原则,避免依赖和紧密耦合,所以如果我明天需要一个新的 EmailClient,它应该很容易实现,而不会违反 SOLID 原则。
附言欢迎任何改进。
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
List<IEmailClient> clients = new List<IEmailClient>();
clients.Add(new SendGrid());
clients.Add(new MailJet());
var emailService = new EmailService(clients);
emailService.sendEmail();
}
}
public class EmailService
{
protected List<IEmailClient> clients;
public EmailService(List<IEmailClient> clients)
{
this.clients = clients;
}
public void sendEmail()
{
foreach (IEmailClient client in this.clients)
{
if (client.send()) {
break;
}
}
}
}
public interface IEmailClient
{
bool send();
}
public class SendGrid: IEmailClient
{
public bool send()
{
var error = true;
Console.WriteLine("SendGrid sending email");
if (error) {
Console.WriteLine("Error");
return false;
}
Console.WriteLine("Sendgrid email sent");
return true;
}
}
public class MailJet: IEmailClient
{
public bool send()
{
var error = false;
Console.WriteLine("Mailjet sending email");
if (error) {
Console.WriteLine("Error");
return false;
}
Console.WriteLine("Mailjet email sent");
return true;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)