处理应用设置值的最佳实践
本文关键字:最佳 应用 设置 处理 | 更新日期: 2023-09-27 17:54:41
我正在努力编写更好的代码,因为这个原因看看我过去写的一些代码,我看到我访问。config appsetting的东西为
Public void Do()
{
Var x = ConfigurationManager.AppSettings.Get("foo");
doSomethingElse(x);
}
写这个方法的测试我问自己是不是有一个暴露所有.config AppSettings值的属性接口更好?这将允许我通过IoC替换真正的实现。
另一方面,我问在类/接口中包装所有这些值是否正确?如果我有不同的程序集组成一个应用程序,我需要访问该对象?假设它将在共享项目中,是否有意义的值为 Int ModelAvalue {get{};}
在永远不会在ModelB中使用的类中定义的?
配置是一个依赖项。我认为你关于创建一个返回最合适类型的接口的想法既有助于测试,又使你的代码更容易理解。它还使您能够灵活地更改将来存储配置的位置。
回答你的另一个问题,根据接口隔离原则,接口越小越具体越好。您可以有不同的接口,其中每个接口都是一组密切相关的设置。例如,您不会有一个包含数据库连接字符串和日志文件路径的接口。
public interface IDatabaseConfiguration
{
string ConnectionString { get; }
}
public interface IBlogConfiguration
{
int NumberOfPostsPerPage { get; }
}
public class AppConfiguration : IDatabaseConfiguration, IBlogConfiguration
{
public string ConnectionString
{
get { return ConfigurationManager.ConnectionStrings["MyDb"].ConnectionString; }
}
public int NumberOfPostsPerPage
{
get { return int.Parse(ConfigurationManager.AppSettings["PostsPerPage"]); }
}
}
将来,如果您决定将NumberOfPostsPerPage
存储在其他地方,您可以创建IBlogConfiguration
的不同具体实现