处理 appsettings 值的最佳实践
Best practice for handling appsettings values
我正在尽我所能编写更好的代码,因此查看我过去编写的一些代码时,我发现我可以使用
访问 .config appsetting
Public void Do()
{
Var x = ConfigurationManager.AppSettings.Get("foo");
doSomethingElse(x);
}
对此方法的编写测试 我问自己,拥有一个具有公开所有 .config AppSettings 值的属性的接口不是更好吗?这将允许我通过 IoC 替换真正的实现。
另一方面,我问将所有这些值包装在 class/interface 中是否正确?如果我有不同的程序集组成一个应用程序并且我需要访问该对象怎么办?假设它将在一个共享项目中,将值设置为
是否有意义
Int ModelAvalue {get{};}
在 ModelB 中永远不会使用的 class 中定义?
配置是一个依赖项。我认为您关于创建一个 returns 最合适类型的接口的想法有助于测试并使您的代码更易于理解。它还使您可以灵活地更改将来配置的存储位置。
为了回答您的其他问题,根据 interface segregation principle,最好让界面更小、更具体。您可以有不同的界面,其中每个界面都是一组密切相关的设置。例如,您不会有一个包含数据库连接字符串和日志文件路径的界面。
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
的不同具体实现
我正在尽我所能编写更好的代码,因此查看我过去编写的一些代码时,我发现我可以使用
访问 .config appsetting Public void Do()
{
Var x = ConfigurationManager.AppSettings.Get("foo");
doSomethingElse(x);
}
对此方法的编写测试 我问自己,拥有一个具有公开所有 .config AppSettings 值的属性的接口不是更好吗?这将允许我通过 IoC 替换真正的实现。
另一方面,我问将所有这些值包装在 class/interface 中是否正确?如果我有不同的程序集组成一个应用程序并且我需要访问该对象怎么办?假设它将在一个共享项目中,将值设置为
是否有意义 Int ModelAvalue {get{};}
在 ModelB 中永远不会使用的 class 中定义?
配置是一个依赖项。我认为您关于创建一个 returns 最合适类型的接口的想法有助于测试并使您的代码更易于理解。它还使您可以灵活地更改将来配置的存储位置。
为了回答您的其他问题,根据 interface segregation principle,最好让界面更小、更具体。您可以有不同的界面,其中每个界面都是一组密切相关的设置。例如,您不会有一个包含数据库连接字符串和日志文件路径的界面。
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