2011-04-18 78 views
1

我正在確定一種設計方法。我想你的輸入用戶工廠和存儲庫

我有2種類型的用戶

  1. 企業內部用戶
  2. 客戶用戶

它們之間的根本區別在技術上是

  1. 企業:不需要在系統中保存密碼,只需要保存角色(對AD認證)
  2. 客戶用戶:將密碼保存在系統中並具有關聯的客戶ID。

我有具有列像這樣

User Name 
Password 
Roles 
Customer ID 

表用戶如果我抽象使用抽象工廠模式的用戶創建過程中,我得到的2種類型的用戶對象。

現在談到創建存儲庫時,我該如何處理它?我是否創建2個不同的存儲庫來處理單個用戶類型對象(映射到同一個表)

回答

1

企業用戶也可以成爲客戶嗎?如果是這樣,你會期望他們使用相同的ID嗎?如果是這樣,你可能想看看實現Party-Role模式(又名演員參與者)。

它將爲您提供統一的解決方案,用於處理內部用戶角色和公司與客戶的區別。

hth。

+0

沒有。企業用戶是與客戶關聯的用戶ID,以便客戶可以登錄系統。可能有多個用戶ID與客戶相關聯。客戶資料完全是一個單獨的記錄。 – Gopal 2011-04-19 11:54:02

1

您應該考慮在用戶表中添加用戶類型列。這樣你可以跟蹤每個記錄代表什麼類型的用戶。在創建存儲庫層中的查找/獲取操作的用戶實體時以及在執行添加或更新過程時,這將會很有用。我只會建議一個「用戶」存儲庫。如果使用繼承並在數據庫級別跟蹤用戶類型,則不需要兩個存儲庫類。

希望這會有所幫助。

享受!

+0

HBM的XML如何將看起來像如果我們使用NHibernate的?由於每個用戶類型都有自己的一組字段。我們應該有兩個不同的hbm文件用於CorporateUser,一個用於CustomerUser將相應的字段映射到同一個表中? – Gopal 2011-04-19 11:54:25

+0

@GeorgeKT - 我沒有使用對象關聯映射器的經驗,並且更喜歡直接實現「存儲庫模式」來獲得性能。 Repository模式的一個很好的描述可以在這裏找到http://msdn.microsoft.com/en-us/library/ff649690.aspx - 希望這有助於 – Doug 2011-04-20 05:42:49

+1

如果引入一個類型,我覺得廠家會跟風 – hanzolo 2013-02-06 00:43:36

1

也許我可以給你一些提示。我同意Doug的意見,您應該只使用一個管理用戶聚合類的UserRepository。

這是我怎麼會跟(流利)NHibernate的做到這一點:與映射到單個列一個UserType枚舉場

User類。看到這篇文章,它非常好,我已經使用了Jimmy Bogard的解決方案多次(http://lostechies.com/jimmybogard/2008/08/12/enumeration-classes/)。然後你有一個UserType類,它實際上只是代表我的數據庫在用戶表中的一列,但是你有一個完整的類與行爲等。

然後解決各類型應該如何處理密碼和客戶關係的差異,你可以使用驗證方案保存它DB之前,以確認您的用戶實例是有效的(根據你的用戶類型)。看看這個博客http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/(再次吉米......我需要說,你應該訂閱吉米博加德的博客:))。

然後你有檢查的,如果用戶類型是內部的,沒有PWD需要和AD角色必須提供一個UserPersistanceValidator。你得到的圖片...

我希望這會幫助你。祝你好運!

+0

我明白了。謝謝soooooo多:) @Doug也感謝你。 – Gopal 2011-04-20 12:33:30