前段时间用简单的三层实现了窗体登录功能,心中有点小小的成就感,但是很快就被泼了凉水,机房收费不可能只用三层实现,如果你用三层,也就是说后面机房收费所有的功能都必须使用三层来实现功能。所以一周前始了七层的研究。经过一个星期的看博客,总结,调代码,终于实现了窗体登录,信息录入,和简单充值查询功能。

  说说自己这次七层之旅的总结吧。

  1.毋庸置疑,研究一个窗体功能,我首先判断的是需要用到数据库中的哪些表(这是属于我自己的编程习惯,不适用全部),然后再实体层中将表中的字段表示出来,有多少个表就有多少实体类,实体类只会多于表的数量!一个表映射出一个实体类,表中的字段就是实体类的属性!这里附带上自己代码中的一部分吧!

Public Class LoginModelPrivate _userID As StringPrivate _level As StringPrivate _password As StringPrivate _userName As StringPrivate _computer As StringPublic Shared UserHead As String  ' 设置全局变量Public Shared UserLevel As StringPublic Property UserID() As StringGetReturn _userIDEnd GetSet(value As String)_userID = valueEnd SetEnd PropertyPublic Property PassWord() As StringGetReturn _passwordEnd GetSet(value As String)_password = valueEnd SetEnd PropertyPublic Property level() As StringGetReturn _levelEnd GetSet(value As String)_level = valueEnd SetEnd PropertyPublic Property UserName() As StringGetReturn _userNameEnd GetSet(value As String)_userName = valueEnd SetEnd PropertyPublic Property Computer() As StringGetReturn _computerEnd GetSet(value As String)_computer = valueEnd SetEnd Property
End Class

2.接下俩进行的是关于工厂+反射+接口+DAL的介绍了

  这个过程中涉及的东西比较多。我先概括的说说自己这部分用到了什么知识吧!

(1) 用反射+抽象工厂的数据访问程序

开始以为是新知识,但是大家可以看看咱们《设计模式》,抽象工厂一章中说到反射利用字符串来实例化对象,而变量时可以更换的!

大家记住一段简单的代码吧:

Assmbly.load("程序集名称").CreadteInstance("命名空间.类名称")我把这段话理解为制造接口的过程。

关于这部分内容会有专门的博客写到!

在敲工厂时会经常出现这样的错误:


出现了这个错误,查了查博客,下面我只说出自己的方法,将DAL中生成输出路径,改为UI的生成输出路径即可,关于这个错误,有好多详细的博客介绍。我就不多说了。

(2)接下来我就开始理解关于工厂,接口和DAL之间的关系了,,工厂反射,就是防止更换数据库,接着工厂其实就是生产接口,将DAL中的类生成接口,然后在DAL中调用接口,来实现接口。

关于DAL中对数据库的增删改查都是重复的,这里我们抽象出一个类Sqlhelper,我们学的是面向对象,就是学会使用面向对象的思想,关于Sqlhelper博客请看我的这篇博客《机房收费重构(四)-SqlHelper》。

Sqlhelper类我写在了DAL的下面,而后面的代码就会变得简单起来,就是声明,实例化,返回值的应用了。附上小部分代码:

<strong><span style="font-size:18px;">    Public Function RechargeQuery(cardno As Model.RechargeModel) As Model.RechargeModel Implements IDAL.IRecharge.RechargeQueryDim sqlparams As SqlParameter() = {New SqlParameter("@CardNo", cardno.StuInfoQuery)}Dim strText As String = "select * from T_StuInfo where CardNo =@CardNo"Dim helper As New SqlHelperDim cmdtype As CommandType = New CommandType()cmdtype = CommandType.TextDim table As DataTableDim Ucardno As New Model.RechargeModeltable = helper.ExecuteQuery(strText, cmdtype, sqlparams)If table.Rows.Count <> 0 ThenUcardno.StuInfoQuery = table.Rows(0).Item("CardNo")End IfReturn UcardnoEnd Function</span></strong>

其实在这一部分还会有关于存储过程的介绍,但是介于篇幅的影响就不向大家介绍了。

 这篇文章纯属个人理解,如有错误理解,欢迎大家踊跃拍砖!

  接下来我会向大家介绍BLL和外观层的理解

转载于:https://www.cnblogs.com/xzpblog/p/5117983.html

机房收费系统重构(三)—工厂+反射+DAL相关推荐

  1. 机房收费系统重构(五)—登陆窗口完整版

         在上上篇.<机房收费系统重构(3)>.中主要是介绍了自己关于DAL层,工厂层.以及接口层,还有实体层的理解.可是好多读者再问我.你的代码呢,我在这解释一下.就是我仅仅是写出关于那 ...

  2. 机房收费系统之抽象工厂篇

    机房收费系统vb.net个人版已完成,在此过程中分层的好处在系统的完成过程中得到了很好的体会.第一遍用的是纯三层做的,这几天又在此基础上又重构了登录的demo,加上抽象工厂和配置文件的使用.下面以登录 ...

  3. vb.net机房收费系统重构——存储过程的使用

    在敲写七层登陆过程中,接触了存储过程的概念,但当时还没使用.在正式的重构过程中,一点点添加,将存储过程也添加到了重构中.才正式了解了存储过程. 首先 [存储过程的概念] 存储过程Procedure是一 ...

  4. 机房收费系统重构之存储过程的使用

    从一开始对于机房收费系统的无从下手,到现在已经接近尾声,像冬天的迷雾一样,随着时间散开了去,对于其也是越来越清晰,想一想,这种学习的过程还真是美妙. 当然只学习不去总结是没有意义的.今天我就来把存储过 ...

  5. 机房收费系统重构版:照葫芦画瓢

        跟随着培养计划的步伐,自己弄完三层后就风风火火的开始了自己机房重构之路!现在回首这一路,有苦过有兴奋过,有想放弃不再做的时候也有挑灯夜战本本没电自动关机的时候,这一切的一切组成了自己这段时间最 ...

  6. 机房收费系统重构版:那个系统我们一起遇到的问题

    前言:  总是说在问题中茁壮成长,俗话说光说不练假把式!回想之前确实停留在嘴上说说就完事了的假把式上,这次敲了第二次机房重构后根据自己的切身经历仔细回味了一番.相比于之前有了更深的理解吧,感觉还是有记 ...

  7. 机房收费系统(三)选中学生强制下机

    机房进行的差不多了,但是自己的学生上机状态查询总是出现错误,该如何单机选中下机呢?自己想的很好,不就是单机选中,然后flexgrid中的和数据库表中的额内容消失不见吗! 想的很简单,其实做起来也并非很 ...

  8. 重构机房收费系统(二)

    接上篇<机房收费系统重构(一)> 二.概要设计 完成了用例图,并用结合用例图完善了一下需求分析说明书,忘记是第几次修订需求分析说明书.有了用例图,很自然就进入了概要设计阶段.我认为这一阶段 ...

  9. 重构机房收费系统(一)

    从10月1号开始重构学校机房收费系统,没想到这次重构,推翻,再重构--用了两周时间. 这次整体架构采用三层,并融入了一些设计模式. 下面介绍这次重构的过程: 一.从UML用例图开始 对于机房收费系统的 ...

最新文章

  1. 2019-3:时间飞逝
  2. 云计算技术 — 云计算技术发展编年史
  3. oracle存储过程的基本语法
  4. u3d中texture2D的Advanced设置解析
  5. 如何快速查看单链表倒数第K个元素
  6. SQVI和SAP查询QUERY的区别和使用注意事项
  7. shell脚本游戏之:剪刀石头布
  8. 【数据竞赛】时间序列竞赛炸榜技巧
  9. ios两张图片的合并
  10. 面向全球用户的Teams app之夏令时篇
  11. mysql开启慢查询日志及查询--windows
  12. vue-flowy前端流程图绘制工具
  13. 页面重绘和回流以及优化
  14. Leetcode每日一题:1025.divisor-game(除数博弈)
  15. 用c语言对文件读取,并使用链表,和顺序表进行存储,操作
  16. OpenCV : 仿射变换
  17. Selenium UI自动化怎么实现
  18. 运算放大器权威指南(第3版) (op amps for everyone)_OP高质量,ED多版本,有钱的动物狂想曲就是能为所欲为...
  19. c语言usb串口通信程序,C语言在RS232串行接口通信中的实现
  20. 前端学习笔记之品优购项目(一) 3.15

热门文章

  1. monkey测试===如何获取android app的Activity
  2. 6、Gerrit插件
  3. 命令查看java的class字节码文件、verbose、synchronize、javac、javap
  4. Apache用户认证配置文件
  5. 好的博客地址html
  6. 使用Xftp连接树莓派并传输文件
  7. 【linux系统】maven安装
  8. SQL SERVER 创建GHUID命令:select newid();
  9. javascript prop和attr的区别
  10. leetCode 两个数组的交集 II 问题记录