机房收费系统一些小Tips

做重构已经有一段时间了,在这段时间里面学了很多新东西,感觉自己的鸡窝做得越来越好了。这里,写下一些小Tips,记录下一些自己感觉很有意思的东西。

一,还是分层的问题

在上下机加完模式后,总感觉很诡异,我的上下机是加完模式后的,第一次这么做,还有点儿生疏,看了半天,才发现我上下机的逻辑居然在U层,如图:

三个类定义在了U层:

然后在下机的时候调用:

虽然能实现下机,但是具体的逻辑还是在U层里面,因为我是在U层定义在U层引用的。想完这个,深感自己对分层的理解才刚刚开始唉~

当自己不知道该把某块东西放在哪层的时候,这时候要问自己:这块代码是做什么用的,更加贴近哪一层?

二,常用类定义为Shared

在D层,我们抽象了SqlHelper,加入了实体-datatable转换类EntityConverter,虽然减少了连接数据库,读取数据库,关闭数据库和具体的表转换实体的细节问题,但是还是存在重复。例如,如每次执行sql语句,都要new个sqlHelper,不知不觉中,多了很多重复内容,以至于到了最后,又开始了copy的方法来new这些东西。其实,可以为要共享的过程或函数定义为shared或者更大方点儿,类也shared了,用的时候直接等就可以了。

三,返回多个不同类型实体时,可以将所要返回的实体写到参数里面

在使用实体作为返回值的时候,有时回有这样的问题:比如,需要某个学生的充值信息,显示在窗体上的时候,要显示充值教师的信息(教师姓名,用户名,级别等。),学生本人的充值信息(金额,日期时间等。)。这两种信息我是写在两个实体中的。但是function只能返回一个实体,怎么办?

先想想我们一起是怎么办的:在上一版机房中,我们是直接选择两各表的,然后返回一个表集。利用datatable可以返回两个表的信息。但是现在返回的是实体,然后有人就想,回去改实体,在一个实体中,加入另一个实体的字段,虽然可以实现返回值的问题,但是不觉得冗余太多了吗?

我们还有很多很温柔的方法来实现。比如,将返回值隐含到参数里面。

例如:

下机完成之后,需要返回学生的上下机信息和学生部分基本信息,如图,参数和返回值正常写:

查完datatable之后,将一个datatable转换为两个实体集合:

既然参数可以隐含到参数里面,那么,是不是可以再隐含一下,将function直接写成sub? 童鞋们有兴趣可以试试,感觉这样去掉return其实挺好的,更加优化内存。

四,解决实体字段和表字段不一致的问题

前段时间,有个小孩纸问完我datatable如何转换为实体集合的原理后,感慨万千:我的表字段和实体字段不对应呀,还得去修改实体字段,前面做好的程序都要改啦!其实,只要在select的时候,加上一个as,就可以解决这个字段不一致的问题,具体为啥自己实践下就明白了。例如:

五,设置默认值

在很多地方,为了减少代码量,一个很好的方法就是设置默认值,只需在特殊的情况下指明一下。

目前感觉到设置默认值有两个好处:1,只需对特殊的地方进行处理,一般地方使用默认值就可以了;

2,如上图,在存储过程中为变量设置默认值,当查出为NULL时,系统 会 自动返回默认值0,不用再拿到程序中去转换了。

六,使用数据库的时间

对 数据库的时间的使用按照使用的位置可以分为两个地方,一个是在代码里:

在主窗体上显示时间的地方,要用一个timmer循环读取服务器中时间,然后显示。

另一个用到时间的地方就是在数据库里面:

强烈建议改掉以前用now()什么的读取本机时间,然后写回数据库的习惯。

机房收费系统一些小Tips

时间: 2024-11-29 09:15:06

机房收费系统一些小Tips的相关文章

机房收费系统(VB.NET)——存储过程实战

最初接触存储过程是在耿建玲老师的视频里,当初只是草草过了一遍,只是有了个印象,知道了这个名词:大二时也有SqlServer数据库这门课,不过老师没讲,自己也没看:真正对存储过程的了解来自于自学考试中的<数据库系统原理>,在考试中,知道存储过程是干嘛的,在纸上怎么写,但从来没有在DBMS中亲手敲过.于是机房收费系统给了我这个机会. 在这里不再过多叙述关于存储过程德基本知识,只写一下在机房收费系统这个小项目中是如何用到存储过程的. 背景: 机房收费系统中有一个注册的功能,原型图如下: 注册时,需要

机房收费系统合作——再看数据库设计

机房合作我负责了最简单的D层,接口层,工厂层.反正D层是我来写,于是数据库索性也就顺便设计了.已经是第三次敲机房收费系统了,每次都是相隔半年左右吧.需求搞得透透的了,数据库也就好设计了.基本跟第二次没什么大的区别,就是把Student表和Card表分开了. 重构的时候,我的数据库几乎什么都用到了:事务,存储过程,触发器,视图,联合查询等等.所以,这次设计数据库还是SO Easy的..并且,为了让婵婵和牛迁迁师哥写的方便,我把组合查询都写成了存储过程!!!!费了一番功夫,但是D层简单了不少.还记得

机房收费系统合作版(一)——框架搭建

机房收费系统的合作版中首次尝试使用框架:三层 + Spring.NET +Nhibernet框架. 一.整体框架图如下: 二.三层架构图如下: DAL层: Adapter: 结构: 实现IRepositoryDAL接口:扩展 继承RepositoryBaseDAL父类:复用 功能: 操作类:封装基本的操作--增删改查 this.HibernateTemplate.Save(entity) this.HibernateTemplate.Delete(entity) this.HibernateTe

重构机房收费系统——数据库设计

曾记得,第一次编写机房收费系统的文档模板,整整有12个文档需要编写,仅仅花了两三天的时间就让师傅验收,完结项目,就这样囫囵吞枣的文档编写完成了. 要知道:欠下的账,终究是要还的.现在到了机房收费系统个人版重构阶段, (1)进行数据抽象,设计局部概念模型: (2)将局部概念模型综合成全局概念模型 (3)就可以按要求绘制机房收费系统数据库概念设计模型--ER关系图. 可以说,之前的数据库的概念设计给我奠定了一丢丢的设计基础,外加<数据库系统原理>中的三范式定理,本着求知好学.虚心请教的理念,于是乎

.NET分层登陆——机房收费系统再总结

去年的时候,我写过一篇机房收费系统登陆的总结文章,那是站在VB的基础上,直接查询数据库实现的登陆.是很初期的知识.如果想了解详情,请看VB查询数据库之登陆窗体--机房收费系统总结(一). 今天,我要换一个角度,换一个方式,来实现登陆.首先,我选择的开发工具是VB.NET,数据库是SQLSever2008.其次,我用的是三层的思想,把界面,逻辑和数据都分开,减少相互之间的影响.在次,界面层尽量简洁,所有的算法和业务逻辑都写到逻辑层,同时使用了接口和工厂模式以及外观模式,减少了相互之间的依赖,降低了

【机房收费系统】磕磕绊绊中总结

每一个庞然大物来之前,总是心里不自觉的退缩一下.这一次,把我自己当成了奥特曼. 命名规范文档 最先看的是这个.有了标准后,才能见其名 知其意. 数据库设计 敲完三层登陆小demo,这一次重新着手,从ER图开始设计数据库.又翻了翻自考的书,把机房收费系统中可能抽出来的实体画出来 又开始一个个找联系.转换为逻辑结构.可能根据业务的不同,表和主键会稍微有些变化.比如,是否允许一个学生有多张卡,退卡之后原来的卡号还能否再注册,退卡是是否要删除记录等修改或添加一些辅助标记字段,也涉及到一些其他问题,例如添

机房收费系统——UML类图

在对一个软件系统进行设计和建模的时候,通常是从构造系统的基本词汇开始,包括构造这些词汇的基本属性和行为.系统分析师如果要对所设计的系统清晰认识,还有考虑这些基本词汇之间的关系.而如果把这些行为可视化为图,就是通常所说的类图. 类图(Class Diagram)是描述类.接口.协作以及它们之间关系的图,用来显示系统中的各个类的静态结构. 类图包括3方面内容: 1.类(Class): 2.接口: 3.关系: 类 类是对一组具有相同属性.操作.关系和语义的对象的描述. 主要包括:类的名称(ClassN

vb.net机房收费系统报表设计

在vs2012中,基于vb.net环境开发了一个机房收费系统,在这个系统中用到了报表.什么是报表? 过去没有计算机的时候,我们算账,记录信息等都在纸上进行,就是列账单清单,通过账单,所需要的信息一目了 然. 在计算机的年代,取缔了手写+纸质账单,用软件来制作清单.这是我用Report.rdlc控件做的一个简单的报表. 设计 制作报表 (1)在UI层添加报表 (2)选择报表控件,并命名控件为weelyReport (3)右击,添加数据集 (4)新建数据源 (6)添加连接 (7)在经过几步操作就到了

机房收费系统学生下机结账小结

这几天一直在考虑机房收费系统学生下机操作.学生下机,一则须要加入学生下机记录信息:还须要计算学生在整 个上机过程中所花费的金额,而且更新学生剩余金额.那么如何做在性能上或者扩展上更好一些呢? 操作 1.加入学生下机信息 2.计算学生上机时间 3.依据上机时间来计算学生所花费的金额 4.更新学生的剩余金额 设计模式 在通过学生上机时间来计算学生所花费的金额这步操作上,须要进行一些条件分支语句的推断.由于上机时间被分为 了三部分:准备时间.至少上机时间.上机时间.所以在步骤3中有大量的条件分支语句,