2012-02-20 56 views
0

一個n層圖層項目。如何將通用代碼應用於繼承基類的繼承類;以構建只讀用戶

在businesslayer中,有一個繼承的類叫做BaseEdit其中包含承包商和基礎屬性。

大約有30 CustomEdit(繼承類),它們都擁有一些方法 「負載」, 「保存 」和「 刪除」。

該現有系統的要求是增加一個只讀用戶。考慮到工程的費用

可能的解決方案:

1)修改BaseEdit因此所有CustomEdit可以保持不變。 系統將使用httpcontext檢查會話中的「用戶角色」,然後接受或拒絕用戶的操作。

所以問題1:vb.net可以實現這個嗎?

'BaseEdit

Public Function Save() Boolean 
'check session in BusinessLayer, if it is ready only user 
'then Validation is false 
End Function 

' CustomEdit

Public Function Save() Boolean 
'Proceed the save 
End Function 

但是當我調用CustomEdit.Save()時,BaseEdit.Save()將不會被調用。 似乎vb.net不支持這種部分方法。 有沒有辦法實現這一點而不需要改變CustomEdit?

2)在SQL Server中,檢查會話狀態並限制用戶訪問插入或更新StoredProc。 問題2:應該發生在SQL Server中嗎?任何人都有這方面的經驗?任何評論的優勢/劣勢?

問題3:在我看來,用戶限制應該通過可靠的控制在web層或業務層實現。 有人告訴我安全訪問的東西應該和數據庫一樣,是不是?

+0

不要爲了吸引更多注意力而添加C#標籤。你明確地要求VB.NET。 – 2012-02-20 14:18:25

+0

所以你重載了'Save',但想要調用基類'Save'。然後,不要覆蓋它或調用'base.Save()'。 – 2012-02-20 14:23:06

+0

@Tim Schmelter我修改了一下這個問題。如果我在Custom.Save()中調用Custom.Save()並且不在Custom.Save()中說BaseEdit.Save(),那麼BaseEdit中的save()仍然不會被調用。 – 2012-02-20 14:36:42

回答

0

這個問題與this非常相似,我相信這個答案對您也是有效的。修改BaseEdit爲唯一具有Save()的類,在其中調用所有基類必須實現的抽象「ProtectedSave()」。這樣你就可以控制在Save()函數中執行什麼和哪些方法。

+0

哎呀,以爲這有標籤中的C#...不知道VB,如果它繼承,那麼這應該是有效的 – 2012-02-20 14:42:59

+0

Thx,我明白你的意思。調用BaseEdit.Save()並處理「InternalSave()」。這很好,但缺點是需要在每個CustomEdit中更改「Save()」的名稱。 – 2012-02-20 15:45:30

+0

或者我試圖在構造函數中添加此檢查。 – 2012-02-20 15:47:04