我有以下問題:在生成的類上應用構建器模式或類似方法
框架從DB表生成一個類,每個表列都是類變量(字段)。 生成的類有超過30個字段,只有一個沒有參數的構造函數。
要創建一個類的實例,我必須用30倍的一些制定者,這是矛盾的邀請。
我不能直接使用的構造方法參數或生成器模式,如我不能編輯生成的類。解決這個問題的最好方法是什麼 - 包裝類,線程安全方法,經典模式?
我有以下問題:在生成的類上應用構建器模式或類似方法
框架從DB表生成一個類,每個表列都是類變量(字段)。 生成的類有超過30個字段,只有一個沒有參數的構造函數。
要創建一個類的實例,我必須用30倍的一些制定者,這是矛盾的邀請。
我不能直接使用的構造方法參數或生成器模式,如我不能編輯生成的類。解決這個問題的最好方法是什麼 - 包裝類,線程安全方法,經典模式?
我已讓該在裏面使用反射一個BeanBuilder
類解決了這個問題我自己。你給它的bean,然後調用像startBean
,value
等類似的方法來爲你的bean填充數據,就像構建一個XML樹一樣。
如果你愛上了類型安全,你可以爲自己相似的類與豆你有特別的作品。
我還製作了一個基於反射的構建器util,它可以(大部分)自動構建您給它的任何類或任何類的列表。您可以指定某些屬性將具有特定值或讓它構成合理的默認值。已經證明在快速構建UI層時沒有完整的數據訪問層是有用的。 – blank 2012-07-24 12:42:27
您可以創建一個外部Builder
類,該類將所有字段初始化爲默認值,無論何時創建新對象,然後其行爲與標準Builder
相似。
這實際上稱爲工廠而不是建造者。 :) – 2012-07-24 12:35:59
@KurtDuBois:你可以爭辯說,任何'Builder'都是一種'Factory',但是將'Builder'移動到一個單獨的類並不會改變它的功能。 – Keppil 2012-07-24 12:40:21
可以使用Builder模式。舉例來說,如果你有場power
,weight
,maxSpeed
Car
對象,color
那麼你可以使用生成器這樣的:
CarBuilder{
private Car car = new Car();
public CarBuilder(int power,int weight){
car.setPower(power);
car.setWeight(weight);
}
public CarBuilder setColor(String color){
car.setColor(color);
return this;
}
public CarBuilder setMaxSpeed(int maxSpeed){
car.setMaxSpeed(maxSpeed);
return this;
}
public Car build(){
return car;
}
}
您可以在costructor必填字段和settters附加字段。您也可以在build
方法中執行一些檢查。
這是什麼框架?據你看,是什麼讓你認爲「建設者」模式比調用安裝者更好? (只是給大家一個方向可能的答案...) – 2012-07-24 12:29:28
該平臺是ERP系統 - Openbravo的,它使用休眠,但還有最重要的是附加層(DAL數據訪問層)。所以所有的交互都是通過DAL層完成的。 – hovanessyan 2012-07-24 12:30:54
你可以使用反射來找到所有的setter方法,你已經有了字段名,所以它會是obj.getClass()。getMethod(「set」+ fieldName,...)。 – Tomer 2012-07-24 12:33:02