理解三层接口(共2篇)
三层接口又分为物理三层接口和逻辑三层接口两大类,逻辑三层接口包括三层VLAN接口和路由子接口,三层VLAN接口集成了路由和桥接双重功能;物理三层接口就只有路由功能,相当于传统的路由器,
1.逻辑三层VLAN接口
逻辑三层VLAN接口为二层交换机的VLAN提供路由接口。传统意义上,网络需要一个从路由器到交换机连接的物理接口来完成VLAN路由,像Catalyst 4500系列这样的交换机通过集成的路由和桥接功能支持在单个Catalyst 4500系列交换机内部的VLAN间(inter-VLAN)路由。
图9-6显示了在传统网络中3个物理设备的路由和桥接功能是如何在一个Catalyst 4500系列交换机中完成的。在左边这个图中显示的是在传统网络中实现VLAN间路由的拓扑结构。在这个结构中,是通过一个路由器(Router)连接二层交换机的两个VLAN的,右图显示的是通过Catalyst 4500系列交换机的逻辑三层VLAN接口来实现内部两个VLAN间的路由(其中的Routing功能是由Catalyst 4500系列交换机自身实现的),因为这个逻辑三层VLAN接口同时集成了路由和桥接功能,
显然右边这种方案更具有成本优势。
【说明】有些模块结构的三层交换机就专门配置有RSM(路由交换模块)或RSFC(路由交换功能卡),其目的就是为了在同一交换机内部不同VLAN之间实现二层交换和三层路由。这一点将在第10章介绍VLAN间路由时具体体现。
在逻辑三层接口中,还有一种接口类型,那就是前面提到的三层以太网通道接口,具体将在本章后面详细介绍。
2.物理三层接口
物理三层接口支持与传统路由器相当的功能。这些三层接口可以使Catalyst 系列交换机直接连接可路由主机。图9-7显示了Catalyst 4500系列交换机是如何担当传统路由器角色的。图中的Rourer就是由Catalyst 4500系列交换机担当的,连接两台主机的接口就是物理三层路由接口。
图9-7 Catalyst 4500系列交换机的物理
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。每个对象的实现方式或同一个对象的实现方式都可能不一样,要使各个对象之间能相互协作通信及交互,则必须规范定义系统各对象,即从概念层次上进行系统分析设计,从领域专家的角度抽象出具体事物的外在共性的层次上进行接口设计,而不用关心具体的接口实现。
组件对象模型(Component Object Model)是组件对象之间相互接口的规范。所谓接口,其精确定义是“基于对象的一组语义上相关的功能”,实际上是一个纯虚类,真正实现接口的是接口对象[1]。文中就基于三层架构系统的网络教学平台中层与层之间的紧耦合的问题,将数据层对象抽象出接口,逻辑层通过调用接口方法访问数据层。数据层将数据实体和业务实体分离,当数据行为改变时并不影响数据实体类,而业务实体则独立于不同的数据库。这样在创建实例时,相关创建的对象有多种类别,而每种类别又有不同的实现。在以往的设计中,一般会通过抽象工厂模式创建对象实例,而文中考虑到数据库的可移植性,利用配置文件和反射功能来实现数据对象的创建,方便了逻辑层的调用。
1 面向接口编程的网络教学平台的设计
平台采取C#、ASP.NET在Windows、VS.NET、DreamWeaver MX 2004环境下进行开发,利用SQLServer2005和Oracle作为平台数据库,采用基于接口模式的B/S三层架构实现平台功能,整个平台在Windows Server 2003上运行。
1.1 平台功能分析
平台主要分有个人空间、课堂空间、资源发布、资源批量下载、智能答疑、专题研讨及视频点播等模块。整个平台经过层层分解,采用自顶向下扩展的方法,把一个复杂的系统分解为多个功能较单一的功能模块。一方面,各个模块既有相对独立性,可以分别加以设计实现,另一方面,模块之间可以通过信息或调用关系等互相关联,共同构成一个整体。如个人空间里所包含的所在课堂空间、个人资源发布管理、个人疑问管理等,都是通过调用其他模块的方法来实现相应的功能。
1.2 三层架构
在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为以下三层,如图1所示。
·数据访问层 也称为是持久层,其功能主要是负责数据库的访问,也就是实现对数据表的Select、Insert、Update和Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化[2]。
·业务逻辑层 是整个系统的核心,它与这个系统的业务(领域)有关。如果涉及到数据库的访问,则调用数据访问层。
·表示层 是系统的UI部分,负责使用者与整个系统的交互。在这一层中,理想的状态是不应包括系统的业务逻辑。表示层中的逻辑代码,仅与界面元素有关。因为这是使用ASP.NET设计的系统,因此包含了许多Web控件和相关逻辑。
1.3 平台总体架构
平台采用图1所示的三层架构,每个层实现应用程序一个方面的逻辑功能,通过层与层之间的交互,形成应用程序体系架构,从而实现适应于企业级应用的,功能复杂的应用程序[3]。
平台共包含9个项目,其中一个Web站点项目,8个类库项目,如图2所示。
2 面向接口编程的网络教学平台的实现
2.1 面向接口编程设计
平台的抽象接口模式主要应用在数据层,系统将数据层对象抽象出接口,方便逻辑层直接调用,如图3所示。
在数据访问层(DAL)中,采用DAL Interface抽象出数据访问逻辑,Model模块包含了数据实体对象,并以DAL Factory作为数据访问层对象的工厂模块。抽象出来的IDAL模块,脱离了与具体数据库的依赖,从而使得整个数据访问层利于数据库迁移。DALFactory模块专门管理DAL对象的创建,便于业务逻辑层访问。SQLServerDAL和OracleDAL模块均实现IDAL模块的接口,其中包含的逻辑就是对数据库的Select、Insert、Update和Delete操作。此外,抽象出来的IDAL模块,除了解除了向下的依赖之外,对于其上的业务逻辑层,同样仅存在弱依赖关系,因为业务逻辑层只需实例化IDAL模块的接口类后,便可以通过接口方法操作数据库。因此只要不涉及到IDAL的接口定义修改,那么业务逻辑层和数据层之间的修改都互不影响,保证两层之间的松散耦合。
2.2 数据访问层实现接口
(1) 数据实体
数据实体主要用于表示数据存储中的持久对象,所有实体类都被放到Model模块中。数据实体可以模拟为一个或多个逻辑表,内容可能来自于一个或者多个数据库中的表中的字段。虽然这些类的属性分别映射了数据表的列,而每一个对象实例也恰恰对应于数据表的每一行,但这些实体类却并不具备对应的数据库访问能力。
(2) 数据业务对象
这里所指的数据业务对象是数据层基本的数据库操作,包括Select、Insert、Update和Delete。由于这些业务逻辑对象,仅具有行为而与数据无关,因此它们均被抽象为一个单独的接口模块IDAL,如图4 中的数据表Resource对应的接口IResourceInfo。
将数据实体与相关的数据库操作分离出来,符合面向对象的精神。首先,它体现了“职责分离”的原则。将数据实体与其行为分开,使得两者之间依赖减弱,当数据行为发生改变时,并不影响Model模块中的数据实体对象,避免了因一个类职责过多、过大,从而导致该类的引用者发生“灾难性”的影响[4]。其次,它体现了“抽象”的精神,或者说是“面向接口编程”的最佳体现。抽象的接口模块IDAL,与具体的数据库访问实现完全隔离。这种与实现无关的设计,保证了系统的可扩展性,同时也保证了数据库的可移植性。在平台中,可以支持SQL Server、Oracle或其他数据库,具体的实现代码分别放在数据层SQLServerDAL或OracleDAL两个不同的模块中即可。
(3) 数据对象创建管理
在平台中,一般针对一个数据表或一类数据表创建一个对象,如针对Resource表的ResourceInfo类创建一个对象。在前面的设计中,这些对象已经被抽象为对应的接口,而其实现则根据类的不同而有所不同。也就是说,创建的对象有多种类别,而每种类别又有不同的实现,这是典型的抽象工厂模式的应用场景。而上面所述的两个问题,也都可以通过抽象工厂模式来解决。考虑到数据库的可移植性,系统最后利用配置文件和反射功能来实现,即可以在项目的web.config文件中,配置好具体的Factory对象的完整的类名。然后利用配置文件和反射功能直接指向具体的数据库对象实现类,例如Platform.SQLServerDAL.IResourceInfo。
平台使用DataAccess类取代了前面创建的工厂类体系,它是一个sealed类,其中创建各种数据对象的方法,均为静态方法。之所以能用这个类达到抽象工厂的目的,是因为配置文件和反射的运用,如下的代码片断所示:
public sealed class DataAccess
{
private static readonly string path = ConfigurationManager.AppSettings[″DAL″];
public static IResourceInfo CreateResourceInfo()
{ //直接指向实现类,返回数据访问实例
return(Platform.IDAL.IResourceInfo)Assembly.
Load(path).CreateInstance(path+″.ResourceInfo ″);
}
}
2.3 业务逻辑层访问接口
业务逻辑层作为接口的访问控制部分,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。在业务逻辑层中,有关数据访问层中数据对象的调用,均利用多态原理定义了抽象的接口类型对象,然后利用工厂对象的工厂方法创建具体的数据对象[5]。如 Platform.BLL.ResourceInfo类所示:
public class ResourceInfo
{ //创建具体的数据对象
private readonly IResourceInfo dal = DataAccess.CreateResourceInfo();
public int Add(Platform.Model.ResourceInfo model)
{
return dal.Add(model); //数据对象调用接口方法添加一条记录
}
}
2.4 表示层设计
在业务逻辑层与表示之间采用紧耦合,将核心业务逻辑都放到了一个模块BLL中,如图5所示。在业务逻辑的处理中,如果存在业务操作的多样化,或者是今后可能的变化,均可以利用抽象的原理,或者使用接口,或者使用抽象类,从而脱离对具体业务的依赖。
3 结束语
本文针对传统面向对象系统数据层及逻辑层耦合度高的问题,给出了一种实用的接口编程模式。该模式将系统数据层的接口和实现进一步分离。接口类只定义操作,将数据层访问方法抽象成一个IDAL接口模块,实现类定义属性和操作的具体实现,保证了系统的通用性和数据库的可移植性。这些设计思想及方案都有极强的通用性,可以给后来的设计人员带来启发和帮助。
参考文献
[1]赵明砚,姜秀萍,刘荣梅.一种应用接口编程思想的软件开发平台[J].计算机工程与应用,2001,21:159-161.
[2]陈冠军.ASP.NET2.0企业级项目开发[M].北京:人民邮电出版社,2007:182-186.
[3]Kevin Hoffman,Jeffrey san,Thiru Thangarathinam,et al.Professional.NETFramework[M].Wrox Press,2001.
[4]Kouresh Ardestani,evin Hoffman,Dnald Xie.高效掌握ADO.NET—C#编程篇[M].张哲峰,译.北京:清华大学出版社,2003.
【理解三层接口】推荐阅读:
RS232接口转USB接口的通信方法11-09
接口测试11-15
微机接口技术实验报告06-12
微机接口技术课程实验考核11-16
微型计算机原理与接口技术"的教学改革探讨09-26
对国际理解教育的理解09-23
意象诗歌理解09-14
理解爱情09-29
理解妈妈作文09-29