[英]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.