Как использовать абстрактные классы в 3-уровневом решении? - PullRequest
0 голосов
/ 01 февраля 2012

Моя непосредственная проблема заключается в том, что в настоящее время у меня есть трехуровневое решение (Presentation.aspx.vb вызывает BusinessLayer.vb, который вызывает DataAccessLayer.vb). Однако я хочу сделать абстрактные классы 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

1 Ответ

1 голос
/ 01 февраля 2012

Если вы используете .Net remoting в качестве уровня связи между уровнями, то это вообще не проблема (это как вызов метода в другом классе в текущем слое).

Если вы используете WCF, то это тоже сработает, купить нужно еще немного поработать.Базовый / абстрактный класс должен быть украшен атрибутами KnownType всех наследуемых классов, которые вы ожидаете пройти.

Если вы используете веб-сервисы, то это невозможно без игры в некоторые игры.Например, вам нужно будет сериализовать объект в строку, используя двоичный сериализатор, а затем десериализовать его на другом конце.

...