博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机房重构 之 抽象工厂+反射+配置文件 实现数据库訪问
阅读量:6894 次
发布时间:2019-06-27

本文共 3119 字,大约阅读时间需要 10 分钟。

  重构机房已经開始三个多星期了,从刚開始的一头雾水,到如今的柳暗花明,由開始的无从下手,到如今感觉犹

如脱胎换骨了般。和两个星期前相比。如今明朗了多了,心情也好了不少。

  先给大家看一下这次重构的总体架构图:

  在前面一篇博文中对三层(UI、BLL、DAL、Entity)做了具体的介绍。

本篇博客着重总结一下在三层的基础上我所做的改进,也就是传说中的七层。

1.Facade层(外观层)

  定义:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口。这个接口使得这一子系统更加easy使用。

  个人理解:外观模式就好像一个文件夹,将全部的方法都整合在了该层(就像接口似的),是一个节点。U层须要什么就直接从外观层调用,降低了U层与B层的耦合。方便了用户对方法的调用。

机房重构登陆窗口为例,给大家分享一下代码:

'''     ''' 验证登陆    '''     '''     ''' 
ture or false
'''
Public Function select_faced(enUser As ChargeEntity.ChargeT_UsersEntity) As boolean Dim selectfaced As New ChargeManagerBLL '实例化b层 Dim dt As boolean '定义dt为集合类型 dt = selectfaced.SelectUserBLL(enUser) '调用b层函数 Return dt End Function

2.抽象工厂+反射+配置文件—实现数据库訪问

  抽象工厂:提供一个创建一系列相关或相互依赖对象的接口。而无需指定它们详细的类。

以下是我的抽象工厂的一个方法

Imports System.Reflection      '引入反射Imports System.Configuration   '引用程序集Imports ChargeIDAL             '引用接口Public Class ChargeT_UsersFactory    Private Shared ReadOnly AssemblyName As String = "ChargeDAL"         '声明程序集名    Private Shared ReadOnly db As String = ConfigurationManager.AppSettings("DB")  '    '''     ''' 用户登陆    '''     ''' 
ture or false
'''
Public Function SelectUsers() As ChargeT_UsersIDAL Dim iselect As ChargeIDAL.ChargeT_UsersIDAL Dim className As String = "ChargeDAL" + "." + db + "ChargeT_UsersDAL" '拼接字符串实现数据库訪问 iselect = CType(Assembly.Load(AssemblyName).CreateInstance(className), ChargeT_UsersIDAL) Return iselect End Function

  配置文件:App.config,存在于UI层。

1一般格式:
2
//配置节声明区域。包括配置节和命名空间声明 3
//配置节声明 4 
//定义配置节组 5  
//配置节组中的配置节声明 6
//提前定义配置节 7
//配置节设置区域

  我的配置文件:

?

xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <add key="DB" value="Sqlserver"/> <add key ="sqlConnect" value ="Data source=.; Database =ChargeSystem; User ID = sa;Password = 123456 "/> </appSettings> </configuration></span>

  注意:写好配置文件要引用System.Configuration。注意工厂中拼接字符串中有DB时注意更改D层对应的类名

为:配置文件里DB的名字+类名。或者上例工厂中去掉DB不改D层类名也可。

 

  反射:提供了封装程序集、模块和类型的对象。

上面的我的抽象工厂中已经用到不在累述。

3.接口:B层通过接口调用D层的方法,不直接和数据库打交道。降低了B层和D层的耦合,保证了安全。

   我的部分接口:

mports ChargeEntity Public Interface ChargeT_UsersIDAL    '定义登陆接口    Function SelectUsers(enUser As ChargeEntity.ChargeT_UsersEntity) As List(Of ChargeEntity.ChargeT_UsersEntity)    '定义改动password接口    Function ChangePWD_DAL(enUser As ChargeEntity.ChargeT_UsersEntity) As Boolean    '定义加入用户接口    Function AddUser_DAL(enUser As ChargeEntity.ChargeT_UsersEntity) As Integer    '定义查询用户接口    Function FindUser_DAL(enUser As ChargeEntity.ChargeT_UsersEntity) As List(Of ChargeEntity.ChargeT_UsersEntity)    '定义删除用户接口    Function DeleteUser_DAL(enUser As ChargeEntity.ChargeT_UsersEntity) As Integer End Interface

  个人点睛:外观层和接口层事实上是一样的。降低了各层的耦合,使调用方法更加方便。通过抽象工厂来创建接

口,I层定义接口。D层来实现接口。也就是所谓的面向接口编程。

通过抽象工厂+反射+配置文件实现了数据库的訪

问。使将来更换数据库时更加灵活方便。

分层事实上就像搭建房屋一样。骨架搭建好了(分层)。剩下的就是慢慢地就

是一摞一摞(一条条线)地砌砖即可了。

你可能感兴趣的文章
ansible-playbook之循环(Loops)
查看>>
docker容器安装和配置
查看>>
MySQL数据类型简介
查看>>
由于未预料的错误,现在无法使用nautilus
查看>>
python很low的三级菜单(六)
查看>>
Go语言之Writer 和 Reader
查看>>
linux 位置参数 特殊变量 read grep 变量赋值
查看>>
JQuery——选择器分类
查看>>
***js常用方法汇总(源自实际中的项目)
查看>>
spool+sql拼接实现导出结果集为csv格式文件
查看>>
【19】Python工资管理系统
查看>>
HAProxy+Keepalived实现Web服务器负载均衡
查看>>
5.交换机介绍
查看>>
各种光线收发器接口一览
查看>>
解决:Windows 强制升级为8.1之后 Mysql连接不上, VisualSVN Server无服务
查看>>
**PHP SimpleXML 使用详细例子
查看>>
找回Windows Vista桌面IE7.0图标
查看>>
配置Linux主机SSH无密码访问
查看>>
servlet接收乱码处理方案
查看>>
自动化运维之Ansible的安装与简单入门命令
查看>>