65.9K
CodeProject 正在变化。 阅读更多。
Home

分布式n层应用程序中的业务外观逻辑

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.30/5 (12投票s)

2004年8月10日

CPOL

3分钟阅读

viewsIcon

107111

downloadIcon

564

解释了如何在n层应用程序中的表示层逻辑和业务逻辑之间实现业务外观逻辑层。

引言

如果您专注于在 .Net 中实现分布式应用程序架构,并且正在寻找表示层和业务逻辑层之间的接口,那么业务外观类将为您提供所需的接口以及它的优势。

什么是外观

外观是一种设计模式。它为子系统中的一组接口提供了一个统一的接口。它定义了一个更高级别的接口,使子系统更易于使用。

如果外观位于业务逻辑和客户端接口之间,它为业务逻辑子系统提供了一个简单、单一的接口。

我为什么要使用外观

使用外观类的目的是消除客户端在向一组复杂服务对象发送请求时可能遇到的困难。 客户端将其请求发送到外观类的实例,该实例充当代理,根据需要操作请求并将其发送到一组业务类。

以一个类的代价,外观使得表示层可以很容易地访问业务层的方法,而无需浏览一堆可能复杂的接口。外观类还促进了业务规则层和表示层之间的弱耦合,因此允许您更改业务规则的组件而不影响表示层。

外观逻辑

示例源中使用的外观层具有以下组件
  • 工厂类 - MyFactory
  • 外观接口 - IMyFacade
  • 外观类 - MyFacade

MyFactory

MyFactory 是一个工厂类。 这是另一种设计模式。 工厂类允许类将实例化推迟到子类。 它是用于创建外观类对象的接口。 工厂类实现了一个名为 CreateFacade 的方法,该方法专门负责实例化 IMyFacade 接口类的对象。

IMyFacade

IMyFacade 是外观接口,它定义了在外观类中实现的方法。 IMyFacade 将请求委托给实现这些方法的相应类。

QJFacade

此类包含不同的子类

  • UIFacade - 由位于 Web 服务器上的组件使用
  • WSFacade - 由 Web 服务使用
  • NRFacade - 通过 .Net 远程处理使用

这些类中的每一个都包含接口 IMyFacade 中定义的方法的自身实现。 这些方法利用了业务逻辑功能。 这些类负责处理业务逻辑之间的交互。

类图

实现

Dim iFacade As IMyFacade  '   Facade Interface

Dim Factory As MyFactory  '   Factory Class 

'   Create a new factory class

Factory = New MyFactory()
'   Create a new Facade class. In this case we create a new instance of UIFacade

iFacade = Factory.CreateFacade(MyFactory.MyFType.UIF) '   Type UIF 

'   Call the required methods which inturn make use of the Business Logic methods

Dim strReturn As String
strReturn = iFacade.DoSomeLogic()

表示层创建工厂类 MyFactory 的一个实例。此实例用于调用工厂方法 CreateFacadeCreateFacade 需要一个枚举类型作为参数,这将决定要实例化的外观类的类型。

调用 CreateFacade 的方法接收在参数中指定的类型的对象。 然后使用此对象来调用外观类中的相关方法。

例如

iFacade = Factory.CreateFacade(UIF)
返回 UIFacade 的一个实例。
iFacade = Factory.CreateFacade(WSF)
返回 WSFacade 的一个实例
iFacade = Factory.CreateFacade(NRF)
返回 NRFacade 的一个实例

CreateFacade 的实现如下

Public Function CreateFacade(ByVal nType As Integer) As Object

    '   Create an instance of the Façade classes based on the Type required.

    If (nType = MyFType.UIF) Then
        Return New MyFacade.UIFacade()

    ElseIf (nType = MyFType.WSF) Then
        Return New MyFacade.WSFacade()

    ElseIf (nType = MyFType.NRF) Then
        Return New MyFacade.NRFacade()
    End If

End Function

就是这样

源代码包含一个示例控制台应用程序,说明了外观类的使用。 外观逻辑可以用作表示层和业务逻辑之间的接口,为您提供以下优势

  • 为您提供表示逻辑和业务逻辑之间的隔离级别。 外观保护表示逻辑免受业务逻辑内部工作原理的影响。
  • 许多模块和类之间的接口变得更易于管理。 它使架构更简单。
  • 最大限度地减少子系统之间的通信和依赖关系。 在表示逻辑和业务逻辑之间提供一定程度的弱耦合

表示逻辑现在将仅参与呈现 UI。 业务逻辑将仅参与交付与业务相关的逻辑。 现在,表示层和业务逻辑层之间的所有通信将完全由业务外观处理,从而在功能方面隔离应用程序的组件。

© . All rights reserved.