Java 配置类-Guice的最佳实践
背景:我正在使用GoogleGuice,因此更容易通过配置类,但我认为这不是最好的方法 我有一个配置类,它存储一些路径:Java 配置类-Guice的最佳实践,java,configuration,guice,Java,Configuration,Guice,背景:我正在使用GoogleGuice,因此更容易通过配置类,但我认为这不是最好的方法 我有一个配置类,它存储一些路径: class Configuration{ String getHomePath(); String getUserPath(); } 我还有一个类“a”需要“homepath”,还有一个类“b”需要“userpath” 是通过类a和b的构造函数传递配置类,还是只通过特定路径传递配置类更好?一般规则是代码,使依赖关系图(哪些类知道或依赖于其他类/接口)尽可能简单、
class Configuration{
String getHomePath();
String getUserPath();
}
我还有一个类“a”需要“homepath”,还有一个类“b”需要“userpath”
是通过类a和b的构造函数传递配置类,还是只通过特定路径传递配置类更好?一般规则是代码,使依赖关系图(哪些类知道或依赖于其他类/接口)尽可能简单、规则和固定 如果不传递配置类使a或b对用户编写的类没有依赖性,或者是避免依赖性循环所必需的,则使用单独的路径字符串。否则,如果说“这个类可以访问配置信息,在将来可能会发生变化”更有意义,则传递该类
我会避免使用单例方法,特别是如果已经设置了Guice 你的问题没有单一的答案,只能根据你的具体情况选择 如果您知道您的
Configuration
类将增长,如果您的A
和B
类可能会从中使用更多,则将整个Configuration
对象传递给它们的构造函数。注:我知道这违反了雅格尼原则,但有时你可能知道你会需要它;-)
否则,可以考虑使用<代码> @的代码> <代码>注入您的路径,以便减少<代码> < <代码> >代码> b>代码>类依赖关系到它们的最小值,这是一个很好的设计实践。
如果您真的使用Guice,那么您的所有配置像这样应该出现在模块“代码>配置< /COD>方法中。因此:HomePath
和UserPath
getHomePath()
将其替换为名为homePath的字符串字段成员getUserPath()
将其替换为名为userPath的字符串字段成员@Inject
注释(应该已经注释),并引入一个字符串参数,分别用@HomePath
和@UserPath
注释,并分配插入值的字符串字段成员class a {
private String homePath;
@Inject
public a(@HomePath String homePath) {
this.homePath = homePath;
}
public String tellMeAboutHome() {
return "We live in a nice home called " + homePath;
}
}
class customModule extends AbstractModule {
public static final String userPath = "/home/rafael";
public void configure() {
bind(String.class).annotatedWith(HomePath.class).to("/home/");
bind(String.class).annotatedWith(UserPath.class).to(userPath);
}
}