2011-08-24 63 views
0

我有什麼是用戶類,並說有2個更多的子類vipUser和regularUser。 在登錄頁面我想檢查身份驗證,我不知道它是vipUser還是regularUser ..如果它是VIP,重定向到一個位置,如果它經常到另一個位置。 認證方法必須是User類的一些resone - 這樣的:NHibernate的 - 如何解決從nhibernate緩存鑄造問題?

Function Authenticate(ByVal username As String, ByVal password As String) As User Implements IMindriUserDao.Authenticate 
     Return MyBase.GetUniqueByCriteria(Restrictions.Where(Of User)(Function(x) x.Username = username AndAlso x.Password = password)) 
End Function 

的問題是,經過我從NHibernate的獲得與用戶的認證,現在我想檢查他是否是VIP或普通,但用戶已經在緩存中作爲一個用戶沒有鑄造選項來檢查用戶是什麼類型... 有什麼建議嗎?!

希望我很清楚..

謝謝!

回答

1

2個選擇:多態性任何映射

多態性(遺憾的是C#,但即時通訊在VB.NET不流利)

class User 
{ 
    public virtual IsVip { get { return false; } } 
} 

class VipUser 
{ 
    public override IsVip { get { return true; } } 
} 

任何測繪圖:無處不在,你有lazyloaded reference to User

public實體地圖() { ReferencesAny(x => x.User) }

+0

+1。我喜歡物業解決方案。通常直接提供信息是最容易的,而不是強制調用者下臺,因此依賴於類模型的實現細節。 –

0

確定嗎?用戶對象應該是正確的具體類型,您應該可以使用isas操作員進行檢查。

var user = Authenticate("userid", "password"); 
var vipUser = user as vipUser; 
if (vipUser != null) { RedirectToChampagneRoom(); } 

也就是說,使用子類化的角色屬性,即User.UserType更容易。