读书人

抽象工场+反射 实例讲解

发布时间: 2012-09-05 15:19:34 作者: rapoo

抽象工厂+反射 实例讲解
抽象工厂模式定义:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。
好处:经常用层数据层,便于更换数据库产品,灵活性强,让具体的创建实例过程和客户端分离。

反射技术:提供了封装程序集、模块和类型的对象。可以使用反射动态地创建类型的实例,将类型绑定到现有对 象,或从现有对象中获取类型。
语法格式:Assembly.load("程序集名称").CreatInstance("命名空间 .类名称")

基础介绍完毕,下面逐步认识实例中的应用:

程序采用三层架构,利用抽象工厂实现了DAL和BLL分离,这是包图:

抽象工场+反射 实例讲解

DAL数据层:
抽象工场+反射 实例讲解

IDAL层和DAL层的关系:
抽象工场+反射 实例讲解

工厂层关系:

抽象工场+反射 实例讲解

代码实现:

BLL层方法:

'******类名:SqlUser'******创建人:毕桃杨'******创建时间:2012年5月6日'****** 说明:数据表SqlUser的操作类Option Explicit OnOption Strict OnImports System.Data              '引用类库Imports System.Data.SqlClientImports IDALImports Entity''' <summary>''' DAL—User操作类''' </summary>''' <remarks></remarks>Public Class SqlUser    Implements IDAL.IUser      '实现I_user接口    ''' <summary>    ''' 添加用户    ''' </summary>    ''' <param name="userInfo">实体类</param>    ''' <returns>返回是否添加用户成功</returns>    ''' <remarks></remarks>    Public Function AddUser(ByVal userInfo As Entity.UserInfo) As Boolean Implements IDAL.IUser.AddUser        Dim btn As Boolean = False          '是否成功标志        Dim sqlHelper As New SQLHelper()    '助手类        Dim strSQL As String                'SQL字符串        Dim i As Integer                    '受影响的行数        '参数集合        Dim paras As SqlParameter()        paras = New SqlParameter() {New SqlParameter("@userID", userInfo.userID),                                   New SqlParameter("@u_password", userInfo.u_password),                                   New SqlParameter("@u_level", userInfo.u_level),                                   New SqlParameter("@u_operator", userInfo.u_operator)                           }        'SQL语句          strSQL = "insert into D_sqlUser (userID,u_password,u_level,u_operator)" _                  & "values(@userID,@u_password,@u_level,@u_operator)"        '执行带参数的过程        i = sqlHelper.ExecuteNonQuery(strSQL, paras, CommandType.Text)        If i > 0 Then            btn = True        End If        Return btn    End Function    ''' <summary>    ''' 删除用户    ''' </summary>    ''' <param name="userInfo">实体类</param>    ''' <returns>是否删除成功</returns>    ''' <remarks></remarks>    Public Function DeleteUser(ByVal userInfo As Entity.UserInfo) As Boolean Implements IDAL.IUser.DeleteUser        Dim strSQL As String   'sql字符串        Dim i As Integer               '受影响的行数        Dim btn As Boolean = False          '是否成功标志        Dim sqlHelper As New SQLHelper        'SQL助手类        Dim strUserId As String             '用户名        strUserId = userInfo.userID         '获取实体类的用户名        '删除用户sql语句        strSQL = "delete from D_sqlStudentInfo where userID ='" & Trim(strUserId) & "'"        i = sqlHelper.ExecuteNonQuery(strSQL, CommandType.Text)        If i > 0 Then            btn = True              '成功        End If        Return btn    End Function    ''' <summary>    ''' sql实现查询用户    ''' </summary>    ''' <param name="userInfo">实体类</param>    ''' <returns>返回记录集</returns>    ''' <remarks></remarks>    Public Function SelcetUser(ByVal userInfo As Entity.UserInfo) As System.Data.DataSet Implements IDAL.IUser.SelcetUser        Dim strUserID As String       '用户名存储        Dim strPWD As String            '用户密码存储        Dim queryString As String       'SQL查询语句        Dim sqlHelper As SQLHelper = New SQLHelper()        '从实体类获取用户名和密码        strUserID = userInfo.userID        strPWD = userInfo.u_password        '查询SQL语句        queryString = "SELECT * FROM D_sqlUser WHERE userID ='" & Trim(strUserID) & "'" & "AND u_password ='" & strPWD & "'"        Dim dtUser As DataSet        '执行不带参数的查询过程        'dtUser = sqlHelper.Query(queryString)        dtUser = sqlHelper.ExecuteQuery(queryString, CommandType.Text)        Return dtUser    End Function    ''' <summary>    ''' 修改密码    ''' </summary>    ''' <param name="userInfo">实体类</param>    ''' <returns>返回是否修改成功</returns>    ''' <remarks></remarks>    Public Function ModifyPwd(ByVal userInfo As Entity.UserInfo) As Boolean Implements IDAL.IUser.ModifyPwd        Dim btn As Boolean = False          '是否修改成功判断        Dim sqlHelper As New SQLHelper()        Dim strSQL As String                'SQL语句        Dim i As Integer                    '受影响的行数        '参数集合        Dim paras As SqlParameter()        paras = New SqlParameter() {New SqlParameter("@userID", userInfo.userID),                                   New SqlParameter("@u_password", userInfo.u_password)                                   }        'SQL查询语句        strSQL = "update D_sqlUser set u_password=@u_password where userid=@userID"        i = sqlHelper.ExecuteNonQuery(strSQL, paras, CommandType.Text)  '执行带参数的查询过程        If i > 0 Then            btn = True    '修改成功        End If        Return btn    End Function    ''' <summary>    ''' 根据用户等级查询信息    ''' </summary>    ''' <param name="userInfo">实体类</param>    ''' <returns>返回记录集</returns>    ''' <remarks></remarks>    Public Function SelectLevel(ByVal userInfo As Entity.UserInfo) As System.Data.DataSet Implements IDAL.IUser.SelectLevel        Dim strLevel As String          '获取用户等级        Dim sqlHelper As New SQLHelper        Dim queryString As String        'SQL语句        Dim dsUser As New DataSet       '定义记录集        '从实体类获得等级        strLevel = Trim(userInfo.u_level)        '查询SQL语句        queryString = "SELECT * FROM D_sqlUser WHERE u_level ='" & Trim(strLevel) & "'"        ''执行不带参数的查询过程        dsUser = sqlHelper.ExecuteQuery(queryString, CommandType.Text)        Return dsUser    End Function    ''' <summary>    ''' DAL 查询用户只是根据用户名查询    ''' </summary>    ''' <param name="userInfo">实体类</param>    ''' <returns>返回记录集</returns>    ''' <remarks></remarks>    Public Function QueryUser(ByVal userInfo As Entity.UserInfo) As System.Data.DataSet Implements IDAL.IUser.QueryUser        Dim strUserID As String         '用户名        Dim strPWD As String            '密码        Dim sqlHelper As New SQLHelper      '助手类        Dim queryString As String           'SQL查询语句        '从实体类获取数据        strUserID = userInfo.userID        strPWD = userInfo.u_password        'SQL查询语句        queryString = "SELECT * FROM D_sqlUser WHERE userID ='" & Trim(strUserID) & "'"        '执行不带参数的查询过程        Dim dsUser As DataSet        dsUser = sqlHelper.ExecuteQuery(queryString, CommandType.Text)        Return dsUser    End FunctionEnd Class


总结:BLL层无需知道DAL层,IDAL接口层实现了数据层和逻辑层的分离,用反射更是减少了分支判断带来的耦合。



4楼llhhyy19891小时前
写的很规范哦,顶[e01]
Re: Jesse6211小时前
回复llhhyy1989n[e04]
3楼lfmilaoshi昨天 21:21
文章太长了。。。。米老师
Re: Jesse621昨天 23:33
回复lfmilaoshin不长写不完啊。。
2楼aboy123昨天 17:46
图不是很清晰。你叫毕桃杨啊?
Re: Jesse621昨天 17:56
回复aboy123n太大了,没办法。。
1楼Jesse621昨天 16:46
反射反射,程序员的快乐~

读书人网 >软件架构设计

热点推荐