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