在用"三层架构"思想做机房收费系统的时候,感觉最经典的三层架构图就是下面这个图了。
你有没有发现按照上面这副图做的话,BLL层跟DAL层联系太紧密了,这样实现的系统,就相当于把数据库写死了,想更换别的数据库可不是件简单的事,于是我们就想到了要在DAL层加上接口+"抽象工厂设计模式"。于是就出现了下面这副图
在这里谈谈我理解的接口所具有的作用,说的不对的地方,还请高手指点!
接口是面向对象方法最重要的特性之一。现阶段我理解的接口具有的作用有两点:一是契约、二是解耦。
一.契约,即约定
在IDAL层的各个接口层,规定好每个接口里实现什么方法,在DAL层的类继承某一接口时就必须实现对应接口里的所有方法,少一个都不行。一个接口可以被多个类继承,一个类也可以同时继承多个接口。
例如,IDAL层有一个访问基本数据表的接口,代码如下:
''' <summary>''' 这是接口层,用于访问“基本数据表”的一个接口''' </summary>''' <remarks></remarks>Public Interface IBaseData ''' <summary> ''' 取出"基本数据表"中数据,放到一个Datatable表中 ''' </summary> ''' <returns>数据表(Datatable)</returns> ''' <remarks></remarks> Function GetBaseDataInfo() As System.Data.Datatable ''' <summary> ''' 更新基本数据表中的信息 ''' </summary> ''' <param name="BaseData">参数为"基本数据"实体</param> ''' <returns>是否更新成功</returns> ''' <remarks></remarks> Function UpdateBaseData(ByVal BaseData As Entity.BaseDataSet) As BooleanEnd InterfaceDAL层的类继承上面这个接口时,就必须实现里面的两个方法,少一个都不行,这样起到一个约束。实现代码如下:
''' <summary>''' 这是数据访问层"基本数据信息"类''' </summary>''' <remarks></remarks>Public Class sqlbaseDataDao Implements IDAL.IBaseData ''' <summary> ''' 取出"基本数据表"中数据,放到一个Datatable表中 ''' </summary> ''' <returns>数据表(Datatable)</returns> ''' <remarks></remarks> Public Function GetBaseDataInfo() As System.Data.Datatable Implements IDAL.IBaseData.GetBaseDataInfo '设置SQL语句 Dim strsql As String = "select * form BaseDataSet" '实例化一个sqlHelper Dim ExecsqlHelper As New sqlServerHelper.sqlHelper '执行无参查询函数,返回"基本数据"数据表 Return ExecsqlHelper.Exequerynoparameters(strsql,CommandType.Text) End Function ''' <summary> ''' 更新基本数据表中的信息 ''' </summary> ''' <param name="BaseData">参数为"基本数据"实体</param> ''' <returns>是否更新成功</returns> ''' <remarks></remarks> Public Function UpdateBaseData(ByVal BaseData As Entity.BaseDataSet) As Boolean Implements IDAL.IBaseData.UpdateBaseData '设置SQL语句 Dim strsql As String = "update BaseDataSet set Rate=@Rate,TmpRate=@TmpRate," _ & "UniTime=@UniTime,LeastTime=@LeastTime," _ & "PrePareTime=@PrePareTime,limitCash=@limitCash,Operatorr=@Operatorr)" '实例化一个sqlHelper Dim ExecsqlHelper As New sqlServerHelper.sqlHelper '创建命令参数数组 Dim sqlParam(6) As sqlParameter '给命令参数数组赋值 sqlParam(0) = ExecsqlHelper.AddsqlParameter("Rate",sqlDbType.float,CStr(BaseData.Rate)) sqlParam(1) = ExecsqlHelper.AddsqlParameter("TmpRate",CStr(BaseData.TmpRate)) sqlParam(2) = ExecsqlHelper.AddsqlParameter("UniTime",sqlDbType.Date,CStr(BaseData.UniTime)) sqlParam(3) = ExecsqlHelper.AddsqlParameter("LeastTime",CStr(BaseData.LeastTime)) sqlParam(4) = ExecsqlHelper.AddsqlParameter("PrePareTime",CStr(BaseData.PrePareTime)) sqlParam(5) = ExecsqlHelper.AddsqlParameter("limitCash",CStr(BaseData.limitCash)) sqlParam(6) = ExecsqlHelper.AddsqlParameter("Operatorr",sqlDbType.VarChar,CStr(BaseData.Operatorr)) '执行修改基本数据命令,返回是否成功 Return ExecsqlHelper.ExeNotqueryWithParameters(strsql,CommandType.Text,sqlParam) End FunctionEnd Class
二.解耦作用
使用第一幅图的设计,我们开发"机房收费系统"用sql Server数据库,如果需要一个Access的数据库orMysqL的数据库,这时需要把涉及数据 *** 作的逻辑代码(BLL层、DAL层)全部改写,对不?
使用第二幅图,我们在DAL层加了IDAL接口,IDAL接口就作为一层。首先,定义逻辑 *** 作接口,涉及数据 *** 作的类(DAL层的类)继承该接口实现,在BLL逻辑层调用的时候,面对的是接口编程,BLL层直接声明接口,将 *** 作对象直接转换为接口类型。 这时候,如果换用不同的数据库,只要改动DAL层的方法就可以了,BLL层就不用改了。面对接口编程也就去除了BLL层与DAL层的耦合。
总结以上是内存溢出为你收集整理的VB.NET 接口的作用----本人现阶段的理解全部内容,希望文章能够帮你解决VB.NET 接口的作用----本人现阶段的理解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)