2009-01-22 29 views
2

我想決定是使用靜態方法來加載/保存對象,還是使用構造函數/實例方法。用於加載和保存對象的構造函數或靜態方法?

所以,說的對象Project,實例的版本將是

public Project(path) { // Load project here } 
public void Save(path) { // Save project here } 

和靜態版本將

public static Project Load(path) { // Load project and return result } 
public static void Save(path, proj) { // Save project } 

所以,您選哪一種?

回答

9

也沒有。支持從您的領域模型中提取持久性邏輯並將其提供到單獨的類層。

(來自ChrisW回答中留下的評論)關於域對象泄漏到另一個類中的詳細信息:如果語言允許,可以通過使用包隱私/內部訪問來限制這些詳細信息的可見性。或者,您可以使用DTO方法。

1

如果沒有要維護的狀態,則只有行爲,則使用靜態方法。但是,如果Project對象需要具有狀態,則應該使用構造函數/實例方法。

1

爲了節省,我認爲Save是一個靜態方法沒有任何優勢。

對於加載,如果Project是抽象基類,則定義靜態Load方法會更好;但除此之外,定義和調用構造函數更具慣用性。

可替換地,我同意moffdub的答案,如果 - 且 - 只要功能足夠大,使持久性邏輯值得分解/分離到其他類中。但是,如果您這樣做,那麼Project中包含的數據的詳細信息不再是私有的(而是必須與加載和保存Project實例的類共享這些詳細信息)。

+0

靜態保存的唯一真正好處是它可以移動到另一個類。我只是爲了完整而將它包括在內。但我同意,如果在對象上定義了保存,則可能值得使用實例版本。 – 2009-01-22 02:55:36