2010-11-22 13 views
5

我鑽進了討論,就以下問題同事:數十名的getter方法VS單get方法

我們的項目在一個配置文件,並將幾十個參數的讀取。他將這些數據與幾十個getter方法一起存儲在命名變量中。在我看來,這使得班級過於冗長,並且很難維持。

private var; 

public String getVar() { 
return var; 
} 
// This appears dozens of times in the class 
...... 

我的解決辦法是將存儲在地圖鍵值對,並具有單個的getValue(字符串key)方法這需要作爲參數表示每個變量的密鑰。這些鍵將作爲常量列表存儲在Config類中,該類也將處理從文件讀取數據。

Config c = new Config(); 
c.readConfig(someFile); 
... 
c.getValue(Config.SOME_VAR); 

他對我的設計的說法是,如果任意鍵需要改變或者過時,關鍵的所有實例必須被追殺,在他的設計在源代碼中的許多地方改變了,而一切從1個文件管理。此外,類型安全性帶來了問題,因爲從getValue()返回的String中的Integer.parseInt()可能會崩潰,而在他的方法中,返回類型是固定的。

有關上述的任何評論?謝謝。

回答

4

他的解決方案很難維護什麼?除非配置格式發生變化,否則我不會預見任何維護(儘管總會有驚喜)。如果需要維護,我認爲這個解決方案會更容易,因爲所有相關的解析(包括string-> int等)都在一個地方。

而且他有更好的編譯時檢查。如果你刪除了一個方法,編譯器會告訴你。如果你將返回值賦給錯誤的類型,編譯器會告訴你。

+1

也許這只是我..我不喜歡看超過2000行的類,其中一半隻是getX(){return X;} – david 2010-11-22 06:59:48

+4

兩個字:代碼生成。 – cdhowie 2010-11-22 07:00:48

+3

長期存在差異,難以維護。 @cdhowie是對的。根據配置格式的不同,您可能會將其作爲真正的「源」,並完全生成Java。 – 2010-11-22 07:05:44

1

假設您正在維護配置文件中的數據是正確的,這些變量的值是固定的。如果是的話你不能使用ENUM?

public enum Data { 

RED("red"), 

WHITE("white"); 

private String color; 

    private Data(String color){ 
    this.color = color; 
    } 


    public String getColor(){return color;} 
} 

如果您試圖多思考一下設計,您甚至可以設法使用不同的數據類型。

0

我傾向於使用框架,如Apache Commons Configuration,它提供對屬性的鍵入訪問。舉例來說,如果你有一個int屬性,你可以使用:

int number = config.getInteger(INT_PROPERTY); 

你應該在一個地方定義所有你的鑰匙,這樣,如果你決定改變的關鍵,你只需要改變一個地方。例如:

public static final String DB_PASSWORD = "db_connection_password"; 

獲取屬性使用:

String password = config.get(DB_PASSWORD); 

如果您決定的關鍵更改爲db_passwd,你只需要改變DB_PASSWORD常量的值。其餘代碼保持不變。

+0

謝謝,這看起來像一個更清潔的方式來處理配置。 – david 2010-11-22 08:53:08