使用SOLID原则将配置值传递给方法
本文关键字:方法 值传 配置 SOLID 原则 使用 | 更新日期: 2023-09-27 18:18:16
我有一个email helper类,它有一个发送email的方法:
private static class EmailHelper
{
public static void SendEmail(string from, string to, string subject, string message)
{
MailMessage msg = new MailMessage(from, to, subject, body);
var client = new SmtpClient("my.smpthost.com"); //this will be moved to config.
client.Send(msg);
}
}
我的smtp主机字符串将放在我的配置文件中。问题是,将smtp主机传递给该方法的推荐方法是什么?我应该在这个类中有一个接受smtp字符串的构造函数吗?或者,我应该将smtp作为第五个参数传递吗?或者这个方法应该直接从配置中读取?
(我知道可能有几种不同的方法可以做到这一点,但我试图理解推荐的方法,或者至少不推荐的方法,记住SOLID原则。)
如果你想遵循SOLID原则,我会以不同的方式设计代码。目前所有使用EmailHelper的代码都将依赖于这个确切的实现。
我将创建两个接口。像这样:
public interface IConfiguration
{
string GetConfigurationValue(string key);
}
public interface IEmailHelper
{
void SendEmail(string from, string to, string subject, string message);
}
然后你可以这样实现EmailHelper:
public class EmailHelper : IEmailHelper
{
private readonly IConfiguration _configuration;
public EmailHelper(IConfiguration configuration)
{
_configuration = configuration;
}
public void SendEmail(string from, string to, string subject, string message)
{
MailMessage msg = new MailMessage(from, to, subject, body);
var client = new SmtpClient(_configuration.GetConfigurationValue("smpthost")); //this will be moved to config.
client.Send(msg);
}
}
现在您可以将实现替换为电子邮件服务和配置。我相信这遵循了坚实的原则。这对于单元测试也非常有用。