2011-03-24 58 views
0

我正在構造一個使用數據庫表中的數據的對象,方法是傳遞我想用來構造對象的數據行的主鍵。我應該使用構造函數中的數據庫中的數據填充成員變量

該對象的成員變量的數量應該在構造函數中發生,還是由構造函數或其他地方調用的另一個方法發生?如何在Rails ActiveRecord和其他ORM中完成這個工作,我懷疑有一組框架需要爲每個字段調用setter,但我並不是真的想要一個複雜的框架來完成這一切,所以最好的練習扮演我自己的簡單機制?

注意:請記住,我不想創建大量無法管理自己狀態的貧血數據模型。

回答

1

我不把持續性管理放在貧血的類別中。它屬於單獨的持久層。我不會把它放在構造函數中。

我認爲貧血症的結果是當對象只關心狀態,並沒有嵌入商業智慧來操縱它。多想一想;不要擔心持久性。

+0

但是,你不需要某種類型的DAO服務對象與重邏輯執行域對象的腿部工作?你也需要讓你的班級中的所有這些設置者設置持久值,這可能會阻礙其他更真實的設置者方法 – zode64 2011-03-24 20:05:54

+0

什麼是重邏輯? 「SELECT * FROM FOO」?邏輯在哪裏? ORM解決方案可以進行現場訪問,因此不需要安裝程序。 – duffymo 2011-03-24 21:35:04

2

許多語言和框架中遵循的安全規則是從不會在構造函數中執行危險的操作(讀取:可能會拋出異常的操作),因爲您通常沒有能力拋出這些異常或以其他方式正常回應它們。我的建議是在類之外執行數據庫操作,然後使用自定義構造函數來獲取對象中所需的字段。在該構造函數中,您將設置(通過簡單賦值)您的內部成員。

+1

我和你一起在構造函數中不執行重邏輯,但自定義構造函數參數可能很快變得雜亂 – zode64 2011-03-24 20:14:04

+0

許多開發人員創建了一個代表所有內部字段的大型構造函數,並且許多創建了許多特殊用途的構造函數。由於您可以通過代碼跟蹤特定構造函數,因此擁有一個或多個特殊用途的構造函數往往會顯示使用模式。 – 2011-03-24 20:16:27

+0

如果字段數量變得壓迫,Joshua Bloch推薦Builder模式。 – duffymo 2011-03-24 22:26:01

相關問題