有一個IUser類。它有一個功能,需要訪問者並允許更改公共屬性。現在修改父級行爲的訪問者層次結構。 Liskov可以嗎?
public IUser
{
public PermissionMatrix Permissions { get; set; }
public void Authorizations(IAuthManager manager)
{
manager.SetRoles(this);
}
}
,它可以通過IAuthManager
public IAuthManager
{
public void SetRoles(IUser user);
}
public InternalAuthManager : IAuthManager
{
public virtual void SetRoles(IUser user)
{
// sets permissions in user for internal security
// according to a complex logic
}
}
public RestrictInternalAuthManager : InternalAuthManager
{
public override void SetRoles(IUser user)
{
base.SetRoles(user); // need to use complex logic of parent
// then reverts few permissions based on conditions
}
}
的類層次我想如果類RestrictInternalAuthManager違反了里氏替換原則來評估訪問。 我一直在爭論是和否,
否:沒有檢查IAuthManager的類型。
是:RestrictInternalAuthManager正在更改InternalAuthManager的後置條件。
這可以保持原樣,還是類需要重構?任何幫助表示讚賞。
明白了,需要重構我猜。感謝您的努力。 – wonderbell 2015-04-02 20:19:39