[英]Configuration class - best practice with Guice
背景:我正在使用Google Guice,因此更容易通过配置类,但我认为这不是最好的方法。
我有一个存储一些路径的配置类:
class Configuration{
String getHomePath();
String getUserPath();
}
我还有一个类“a”需要“homepath”和一个类“b”需要“userpath”。
是通过类a和b的构造函数传递配置类还是仅通过特定路径更好?
如果您真的正确使用Guice,那么所有这样的配置都应该出现在模块的configure
方法中。 所以:
HomePath
和UserPath
。 getHomePath()
将其替换为名为homePath的String字段成员。 getUserPath()
将其替换为名为userPath的String字段成员。 @Inject
annotated(应该已经是)并接受一个String参数,分别用@HomePath
和@UserPath
注释并分配注入值的String字段成员。 .annotatedWith()
来定义正确的值; 如果它们仅在运行时可用,请绑定提供程序。 例如
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);
}
}
如果为您创建注释太多,请使用随附的@Named注释Guice。
一般规则是使依赖图(哪些类知道或依赖于其他类/接口)尽可能简单,规则和固定的代码。
如果没有传递Configuration类使得a或b对用户编写的类没有依赖关系,或者为了避免依赖循环,则使用各个路径字符串。 否则,如果更有意义地说'此类可以访问配置信息,以某种可能在将来发生变化的方式',则传递该类。
我会避免使用单例方法,特别是如果你已经设置了Guice。
您的问题没有单一的答案,根据您的具体情况,只有可供选择的选项。
如果您知道您的Configuration
类将会增长,并且如果您的A
和B
类可能会使用更多,那么将整个Configuration
对象传递给它们的构造函数。 注意:我知道这违反了YAGNI原则,但有时你可能知道你会需要它;-)
否则,您可以考虑使用@Named
注入路径,以便将A
和B
类依赖性降低到最小值,这是一个很好的设计实践。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.