這是一個設計問題。我試圖在2個實現之間做出決定。我應該在構造中加載Java對象的數據,還是通過方法調用顯式加載?
爲了正確解釋這個,我需要一個例子。所以,爲了舉例:
我有一個類,可以生成關於特定日期某些股票市場價值的報告。我創建了一個StockMarketReportGenerator
對象,傳遞它今天的日期,並根據當前的市場價值生成報告。
該StockMarketReportGenerator
「有一個」StockMarketData
對象。 StockMarketData
對象的用途是包含存儲在數據庫中的表格(可能稱爲StockMarket :))中的所有股票市場值,以及從表格數據計算出的一些其他值。它具有與數據庫連接的私有方法,檢索數據,進行必要的計算,並將最終值存儲在對象的成員變量中。 (然後它有getter方法來公開這些值,但沒有setter方法。)StockMarketData
類基本上是股票市場數據值的「持有者」。我有一個叫做「calculateStockMarketData()
」的中央功能,它調用所有這些專用幫助程序方法並設置對象。 (我知道所有這些處理可以通過Hibernate這樣的框架更容易地處理;但是決定手動完成,因爲它是一個非常小的臨時項目,不值得設置。)
我的問題是 - 從我的ReportGenerator
類中,我只需要StockMarketData
對象以訪問它的屬性/ 成員變量 - 後處理和後期計算。這意味着真的,我想獲得預填充對象 的數據。因此,我保留calculateStockMarketData
私有方法,並從StockMarketData
構造函數中自動調用它。但是我對於在構造函數中完成所有處理,然後沒有任何公共方法感到有些不安。這是一個設計缺陷嗎?或者,這是否是最合乎邏輯的方式?基本上,以下兩種實現中的哪一種更好?
1)(我目前的實現)使中央calculateStockMarketData()
方法私人和從StockMarketData
方法構造函數(通過今天的日期稱呼它),這樣,只要你有一個StockMarketData
對象,它已經填補。因此,所有我需要從ReportGenerator
類之前,我開始使用對象屬性是線路:
StockMarketData myData = new StockMarketData(someDate);
2)使中央calculateStockMarketData()
方法公開,因此,爲了建立一個StockMarketData
對象,你需要明確調用該方法。因此,從ReportGenerator
類我將代碼:
StockMarketData myData = new StockMarketData(someDate);
myData.calculateStockMarketData();
第一個給我的印象中更好的設計,特別是因爲有那麼沒有使用對象屬性它們被初始化之前的可能性。但我也不確定關於從構造函數執行大量代碼的標準......我應該選擇哪一個?
StockMarketData在構建期間可能不會實際執行任何數據庫操作,它似乎更像是一個由StockMarketReportGenerator依賴的DAO。因此在施工時傳遞有效的DAO參考是一件好事。 – crowne 2010-03-10 19:35:43