我使用Builder模式爲我的項目的幾個類(多個參數,一些必需的,一些可選等)。這些類是不可變的(沒有setter,對於集合getters深度複製)。構建模式和持久性
我現在試圖使用持久性框架將這些對象存儲在數據庫中,該框架使用默認構造函數+ setter構造對象。它不喜歡我的建造者!
我不想降低設置到POJO並失去當前設計(靈活性,不變性,施工安全性)的優勢。
我會歡迎任何關於在這種情況下可以使用的解決方法的反饋(我可以包裝每個類,但這會使類的數量增加一倍,我寧願避免這樣做)。
其中一個post實際上指出,作爲Builder模式的特定缺點。
編輯
一個answer建議使用私有構造/ setter方法,但是,只有當類的字段不是最終的,這不是我的情況下工作。
最後編輯
感謝所有。
我認爲將是我最後的解決方案看起來像這樣和正常工作(根據記錄,我使用MongoDB的+嗎啡):
class AClass {
private final String aField;
private final AClass() {
aField = "";
}
//Standard builder pattern after that - no setters (private or public)
}
你不能包含setter和默認構造函數,但使它們是私有的? – DaveJohnston 2012-02-22 15:24:46
好問題 - 我會檢查一下 – assylias 2012-02-22 15:25:20
我知道Hibernate可以使用私有setter和構造函數,只是想知道在你的具體情況下是否有任何反對。 – DaveJohnston 2012-02-22 15:27:04