所以有一個大系統的小場景。這是一個汽車預訂系統,用戶類需要更有凝聚力。在我的初始場景中,我的User類負責處理用戶操作、用戶驗證、用戶組態檔,并為Admin提供不同的類。
- 團隊被指示使用戶類更具凝聚力
- 將User分成UserProfile并使Verification Process與此類分開
- 由于Admin也是用戶,因此您可以從User繼承Admin。

- Admin將繼承UserProfile部分,但Verification Process僅適用于客戶。
現在這就是我卡住的地方,我不知道用戶驗證如何只能連接到父類的用戶而不是子類。作為管理員不需要任何驗證程序。
我建議的解決方案是:
但我非常不確定繼承兩個用戶,特別是當Customer類具有所有驗證方法時,這意味著類名不代表它的實際功能。
uj5u.com熱心網友回復:
設計如何?
您建議的解決方案是一個有趣的開始。它分開:
- the
User,它公開了可以由某些用戶界面驅動的操作, - ,
UserProfile管理用戶的個人資訊, - 用戶的角色,即
Customerrole 或Admin,它提供角色特定的行為和職責。
這種設計的主要弱點是關注點分離不夠充分。
將用戶界面行為與內部行為分開
您的某些類似乎是域類,但同時似乎應該具有用戶界面職責(例如UserProfile和editProfile())
如果這是一個帶有命令列界面的玩具專案,沒關系。但更安全的方法是關注可以由用戶界面呼叫一些資料的類,但本身沒有任何用戶界面責任(例如editProfile() ,將被替換為允許表單填充內容的 getter,以及 setter,驗證表單后更新類)。
使用裝飾器模式分離職責
Customer兩者Admin都為用戶添加了不同的職責和屬性集。您可以不使用繼承,而是更喜歡組合并使用裝飾器模式:Customer然后Admin成為 的裝飾器User,其中Customer將添加管理驗證的責任。
一個輕微的改進是區分 aUser和 a UserRole。A UserRole將是一個抽象類,而 Customer 和 Admin 將是該角色的裝飾器。
這將允許您在不更改用戶設計的情況下輕松引入新角色(Supplier, , ...)。如果您更改合成方面的Auditor多重性,您甚至可以同時允許多個角色。UserRole
使用策略模式實施策略
您在解決方案中引入的另一個問題UserVerification是將部分合并UserProfile到Customer. 這不是一個很好的關注點分離。
更好的方法是制定UserVerification一個. 您可以決定在每個特定的構建中設定策略。然后可以使用輕型策略,將用戶視為始終經過驗證而無需進一步的步驟。UserRoleUserRoleAdmin
更多(不相關的)想法
永遠不要存盤密碼。互動不應該是:“詢問密碼,然后獲取組態檔密碼并驗證它們是否相同”,而是“詢問密碼,計算密碼哈希碼,檢查哈希碼是否匹配”。
在這方面,您可以考慮將與密碼相關的屬性和操作提取到一個單獨的類中。這將允許更改現有的用戶身份驗證策略,并選擇作業系統身份驗證、2FA 身份驗證、單點登錄和其他身份驗證方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/534231.html
上一篇:Vuex
下一篇:將創建的日期序列拆分為單獨的列
