2010-05-24 75 views
0

在我的設計中,我使用的是評估數據記錄的對象。用數據記錄和評估類型作爲參數調用構造函數,然後構造函數調用評估記錄所需的所有對象代碼。這包括使用評估類型在文本文件中查找其他類似參數的數據。創建在構造函數中只執行代碼的對象是否糟糕?

在附近有250個獨特評估類型使用來自文本文件的相同或相似代碼和獨特參數。

其中一些評估使用不同的代碼,所以我從這個模型中受益匪淺,因爲我可以使用繼承和多態。

一旦創建了對象,就不需要在對象上執行額外的代碼(至少現在是這樣),並且它更像結構體;它保留在列表中,以後使用3個屬性。

我覺得這個設計最容易理解,代碼和閱讀。

一個合乎邏輯的選擇我猜會使用返回分數結構的函數,但是你不能從方法繼承,所以它會讓它變得馬虎。

我正在使用vb.net,這些類將用於asp.net web應用程序以及分佈式應用程序中。

感謝您的輸入

+1

某些代碼或僞代碼可能會使此問題可能需要回答...... – msw 2010-05-24 23:02:36

+0

它取決於語言,在JavaScript中,您可以使用所需的變量返回一個對象 – 2010-05-24 23:06:30

+0

如果所有內容都處於構造函數?如果將評估移至(虛擬)方法,您將獲得多態性。 – mdma 2010-05-24 23:12:18

回答

2

在構造函數中執行代碼是可以的;但只有沒有方法的屬性可能違反了tell don't ask原則:或許相反,那些屬性應該是私有的,使用(「詢問」)這些屬性的代碼應該成爲類的方法(您可以調用或「告訴「)。

+0

我認爲在鏈接到的文章的標題(!!!)中出現嚴重拼寫錯誤是很可悲的。 – Jason 2010-05-25 00:56:45

+0

@Jason - 你知道有什麼好的/更好的文章說明了「不要問」的含義嗎? – ChrisW 2010-05-25 08:56:51

+0

沒有對內容質量做任何說明。只是,cmon,至少拼寫你的標題是正確的! – Jason 2010-05-25 16:28:46

2

一般情況下,把代碼做任何事情顯著的構造函數不是一個好主意,因爲你最終會得到陷於癱瘓剛性構造函數執行順序,當你繼承。

構造函數最適用於使對象處於一致狀態。實例方法最好處理「真實」工作。隨着作爲一種方法實施的工作,您將獲得:

  • 將您想要評估的內容與您想評估的內容區分開來。
  • 多態性(如果使用虛擬方法)
  • 選項將工作分解爲邏輯部分,將每個部分作爲具體的​​執行。這些模板方法可以在子類中重寫,它提供了「大致像我的超類一樣執行,但是做的有點不同」。

總之,我會使用方法來實現主要計算。如果您擔心沒有調用評估方法就會創建對象,則可以使用工廠創建對象,然後在構造後調用評估方法。您可以獲得構造函數的安全性,方法的執行順序具有靈活性。

+0

是的,我實際上做的和你正在談論的模板方法非常相似,我認爲大多數實際評估都是在方法內部。謝謝 – Curtix 2010-05-25 15:59:21

相關問題