2012-07-24 22 views
2

我有以下問題:在生成的類上應用構建器模式或類似方法

框架從DB表生成一個類,每個表列都是類變量(字段)。 生成的類有超過30個字段,只有一個沒有參數的構造函數。

要創建一個類的實例,我必須用30倍的一些制定者,這是矛盾的邀請。

我不能直接使用的構造方法參數或生成器模式,如我不能編輯生成的類。解決這個問題的最好方法是什麼 - 包裝類,線程安全方法,經典模式?

+0

這是什麼框架?據你看,是什麼讓你認爲「建設者」模式比調用安裝者更好? (只是給大家一個方向可能的答案...) – 2012-07-24 12:29:28

+0

該平臺是ERP系統 - Openbravo的,它使用休眠,但還有最重要的是附加層(DAL數據訪問層)。所以所有的交互都是通過DAL層完成的。 – hovanessyan 2012-07-24 12:30:54

+0

你可以使用反射來找到所有的setter方法,你已經有了字段名,所以它會是obj.getClass()。getMethod(「set」+ fieldName,...)。 – Tomer 2012-07-24 12:33:02

回答

1

我已讓該在裏面使用反射一個BeanBuilder類解決了這個問題我自己。你給它的bean,然後調用像startBean,value等類似的方法來爲你的bean填充數據,就像構建一個XML樹一樣。

如果你愛上了類型安全,你可以爲自己相似的類與豆你有特別的作品。

+0

我還製作了一個基於反射的構建器util,它可以(大部分)自動構建您給它的任何類或任何類的列表。您可以指定某些屬性將具有特定值或讓它構成合理的默認值。已經證明在快速構建UI層時沒有完整的數據訪問層是有用的。 – blank 2012-07-24 12:42:27

2

您可以創建一個外部Builder類,該類將所有字段初始化爲默認值,無論何時創建新對象,然後其行爲與標準Builder相似。

+0

這實際上稱爲工廠而不是建造者。 :) – 2012-07-24 12:35:59

+0

@KurtDuBois:你可以爭辯說,任何'Builder'都是一種'Factory',但是將'Builder'移動到一個單獨的類並不會改變它的功能。 – Keppil 2012-07-24 12:40:21

0

可以使用Builder模式。舉例來說,如果你有場powerweightmaxSpeedCar對象,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方法中執行一些檢查。