2012-02-01 48 views
0

我的直接問題是,目前我有一個3層解決方案(Presentation.aspx.vb調用BusinessLayer.vb調用DataAccessLayer.vb)。但是,我想製作BusinessLayer和DataAccessLayer.vb抽象類,因爲幾個Webforms將使用相同的功能。如何在三層解決方案中使用抽象類?

所以我目前正在做這個(沒有抽象類):

'Presentation Layer (pseudocode) 

public sub checkUser(byval userName as string, byval dept as string) 

    dim isGood as boolean = BL.checkUserAccess(userName, dept) 

    'some more code 
    'change properties of webcontrols, etc 

end sub 



'Business Layer (pseudocode) 

public function checkUserAccess(byval name as string, byval group as string) as boolean 

    dim accessObject as dataObject = DAL.checkPermissions(name, group) 

    if accessObject.isHighAccess then 
     'some code 
    else 
     'some other code  
    end if 

end function 



'Data Access Layer (pseudocode) 

public function checkPermissions(byval userid as string, byval section as string) as dataObject 

    'some code 

end function 

但是我仍然可以有這樣的結構,如果我添加抽象類?

例如:

'Presentation Layer (pseudocode) 

public sub checkUser(byval userName as string, byval dept as string) 

    dim isGood as boolean = instOne_BL.checkUserAccess(userName, dept) 

    'some more code 
    'change properties of webcontrols, etc 

end sub 



'Business Layer (pseudocode) 

public class instOne_BL inhertis BL 

    public function checkUserAccess(byval name as string, byval group as string) as boolean 

     base.checkUserAccess(name, group) 
     instOne_DAL.checkPermissions(name, group) 

    end function 
end class  


'Data Access Layer (pseudocode) 

public class instOne_DAL inherits DAL 

    public function checkPermissions(byval userid as string, byval section as string) as dataObject 

     base.checkPermissions(userid, section) 

    end function 
end class 
+0

你有興趣使用抽象類(意味着使用MustInherit)還是​​只繼承一個類?你的例子看起來像我的簡單繼承。 – 2012-02-01 16:55:54

+0

那麼繼承抽象類並在我的3層設置中使用它就是我感興趣的內容。如果這是有道理的。 – dotnetN00b 2012-02-01 17:10:33

+0

各層之間的通信機制是什麼?答案將取決於它是.Net遠程處理,WCF,Web服務還是其他。 – 2012-02-01 17:26:55

回答

1

如果使用.Net遠程爲層之間的通信層,那麼這是完全沒有問題的(它就像調用當前層內的另一個類的方法) 。

如果你使用WCF,那麼這也將工作,購買你需要做更多的工作。基類/抽象類必須用您希望傳遞的所有繼承類的KnownType屬性進行修飾。

如果您使用網絡服務,那麼這是不可能的,沒有玩一些遊戲。例如,您需要使用二進制序列化器將對象序列化爲字符串,然後在另一端反序列化它。