我有一個自定義ASP.NET成員資格提供程序,我試圖添加密碼歷史記錄功能。用戶密碼在X天后過期。然後他們必須將他們的密碼更改爲以前的X更改中未使用的密碼。是否應該始終加載域實體?
我已經擁有了用戶實體,它擁有當前密碼的密碼屬性。這映射到數據庫中的用戶表。因爲我需要一個以前的密碼列表,所以我創建了一個UserPassword表來存儲這個信息,其中包含了對UserId的FK引用。
由於密碼是值對象,並且在用戶之外沒有任何意義,所以它們屬於User聚合內部,並且以User作爲根。但在這裏謊言我的困境。當我從存儲庫中檢索用戶時,是否總是必須獲取他們以前使用過的所有密碼? 99%的時間我不關心他們的舊密碼,所以每次我需要一個用戶實體時檢索它們看起來像是一個愚蠢的事情來做數據庫性能。我不能使用延遲加載,因爲用戶實體與上下文斷開連接。
我想創建一個PasswordHistory實體,但由於上述原因,密碼並不是真正的實體。
DDD專家如何處理這種情況?
謝謝。
編輯1:考慮到這一點之後,我意識到這實際上是一個關於延遲加載的問題。更具體地說,你如何處理一個斷開的實體中的延遲加載?
編輯2:我正在使用LINQ to SQL。使用CodePlex的this將實體完全脫離上下文。
我正在使用LINQ to SQL,並使用CodePlex中的[this](http://linq2sqleb.codeplex.com/)從上下文中完全分離實體。這個項目中的其他實體會執行對象關聯的條件加載,結果是一個完整的噩夢。我不知道這種模式有多頻繁,但從現在開始我會避開它。所以...不情願那個解決方案,我選擇刪除用戶的關聯,並創建一個PasswordHistory域實體,以包含UserPassword數據庫實體和相關邏輯的列表。我必要時使用這個實體做一個單獨的請求。 – mikesigs 2011-03-02 15:36:18