簡體   English   中英

在構造函數中填充大量數據是不好的做法嗎?

[英]Is it bad practice to populate lots of data in a constructor?

在構造函數中進行所有數據導入是不好的做法嗎? 還是使用靜態工廠方法更適合創建對象,填充對象然后返回它?

我肯定有一些對象可以將所有數據准備就緒,例如數據驅動的單例對象,例如擴展的Hashmap,這些對象在構造時會從數據庫中提取數據。 我發現這種方法比延遲初始化更好,尤其是在並發環境中。 但是我做錯了嗎?

class MyHashMap extends HashMap<MyKey, MyObject> 
{
    private MyHashMap() { 
         populateFromDb();
    }
}

如果一切都記錄到已創建對象的狀態,則沒有任何“錯誤”。

但是,從體系結構的角度來看,您應該在某個位置上運行所有業務代碼。 這是您發出數據庫連接並讀取數據的地方。 您甚至可以編寫一個單獨的類來執行填充任務。

原因:

在某些情況下,您想用其他方法代替人口機制。 例如,在單元測試中,您可能想用一些硬編碼的測試數據填充數據,因此您不需要用於單元測試的數據庫。

從理論上講,擁有龐大的構造函數沒有錯。 但是,也許像工廠這樣的創新設計模式會有所幫助。 約書亞·布洛赫(Joshua Bloch)-在他的《有效的Java》一書中建議在構造函數上使用工廠,在大型參數化構造函數上使用構建器。 構建器模式允許您分步創建對象。 您一次需要所有數據嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM