0

当面の問題は、現在 3 層のソリューションを使用していることです (Presentation.aspx.vb は DataAccessLayer.vb を呼び出す BusinessLayer.vb を呼び出します)。ただし、複数の Web フォームが同じ機能を使用するため、BusinessLayer と DataAccessLayer.vb を抽象クラスにしたいと考えています。

だから私は現在これをやっています(抽象クラ​​スはありません):

'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
4

1 に答える 1

1

レイヤー間の通信レイヤーとして .Net リモーティングを使用する場合、これはまったく問題ありません (現在のレイヤー内の別のクラスのメソッドを呼び出すようなものです)。

WCF を使用している場合、これも機能しますが、もう少し作業が必要です。基本/抽象クラスは、渡すと予想されるすべての継承クラスの KnownType 属性で装飾する必要があります。

Web サービスを使用している場合、これはいくつかのゲームをプレイしないと不可能です。たとえば、バイナリ シリアライザーを使用してオブジェクトを文字列にシリアル化し、反対側で逆シリアル化する必要があります。

于 2012-02-01T17:32:24.960 に答える