机房收费系统的合作版

概述

       机房收费系统的合作版自己负责的是B层和Facade层,在做这块的时候有很多的感触:动态SQL语句;设计模式;合作开发应该注意的点。其中动态SQL语句的理解已经在上一篇博客中写了,如果你有意向的话,可以看一看,这篇博客主要是针对的是后两者的叙述。

设计模式

       合作开发系统中运用的设计模式:模板方法模式,外观模式,抽象工厂+反射+配置文件,单例模式,装饰模式,职责链,状态模式,策略模式。

       下面是我们系统代码体系结构图


下面简单的介绍一下这些模式的使用。

       模板方法模式

              模板方法模式在U层使用。先创建立了一个窗体, 在窗体上布置控件,设置相应的属性,把公用的代码以函数的形式写在这个窗体里,在相应的事件里写上相应的代码。这个窗体就是我们的模板,我们以继承的方式来用这个窗体,这样新添加的窗体就是会具有父窗体里面的所有东西,不用再写就可以直接用,我们也可以再重写相应的代码。

       外观模式

               没什么好说的,这个模式的运用,给上层项目的使用提供方便。

       抽象工厂+反射+配置文件

                运用反射创建D层对象时,经过D层吗?毋庸置疑,一定经过,不过这种经过一种是我们看的见的,一种是我们看不见。看的见就是我们在D层类中,创建了全局变量(对象类型的)或有相应的构造函数。构造函数是类实例化对象时调用的方法,这个方法我们可以写,也可以不用,当我们写上后,那么实例化该类的时候,我们单步执行程序时就会跳转到类中的这个函数,当我们不写时,系统会调用默认(根父类)的构造函数,此时,我们实例化类时,仍经过这个函数,但是,我们单步执行的时候就看不见了;创建全局变量(对象类型),我们在实例化该类的时候,其实我们在做的是一件这样的事:实例化一个对象,不过这个对象里面又有一个对象,而这个对象的执行必须要让代码执行,所以,我们单步执行的时候,一定会看到代码停留在那。

       单例模式

              一个类里有一个静态方法,有一个静态的全局变量,静态全局变量里存放的是这个类的对象,静态方法是对这个静态全局变量的判断来做出是不是要创建自己类的对象。我们创建这个类的时候,不是用的它的构造函数,而是用的它的这个静态方法。工厂类和SQLHelper类都可以用单例模式。

       状态模式             

        onLineBLL类里面的SetState方法就是所有具体的状态类设置下一个状态需要用到的方法,其Online方法就是对外提供的接口方法。TestOnLineBLL就是提供一个规范。每一个状态类里面其实就是一个If…Else举行,Else里一般就是设置下一个具体状态的代码,其用的方法就是onLineBLL类中的SetState方法,之所以能用这个方法是应为函数中的OnLineBLL对象。状态模式就是把复杂嵌套的If…Else拆分成多个小的If…Else。

       职责链模式

              职责链在图上看和状态模式非常的像,唯一的区别就是把“具体的状态类”分别替换了“TestOnLineBLL”的位置,继承和聚合的关系。“SetState”方法在类中被实现了。子类的方法也是一个If…Else结构,不过Else里面不是具体的“State”,而是通过调用端具体的实现的,这样就实现了,不需要知道那个类最终会帮你完成,只要你随便的实例化一个链头,并且给其串上其他的环,那么你就可以通过这个类的方法来帮你完成这个任务。

       装饰模式

               装饰模式用在了管理员登陆的过程中,装饰模式就是对象里面套对象的过程,相当于我们的嵌套函数,但嵌套的函数的功能是不同的,并且这种嵌套是我们自己设置的,这样我们就可以动态的实现添加新的功能了。

       策略模式

              策略模式用在了收费上。策略模式相当于我们使用的简单工厂,不同的是,策略模式的“工厂类”里面多了一个函数,这个函数完成了调用具体策略方法的过程。


合作开发注意的地方

       参数的赋值情况,我们的参数一般都是对象类型,此时,我们就需要给定义一下了,这个实体的属性都需要赋值吗,这个实体的属性都是在哪个层应该被赋值;方法的作用一定要写清楚,有时候方法里需要判断某个参数的属性才能完成其逻辑任务,此时,我们应该说明一下;对于出现DataTable一样的返回对象,如果需要我们进行操作里面的数据时,我们应该说明一下字段名;有方法返回值时,要说明一下具体返回值的含义。


总结

       继续加油!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ajax跨域,这应该是最全的解决方案了

From: https://segmentfault.com/a/1190000012469713 前言 从刚接触前端开发起,跨域这个词就一直以很高的频率在身边重复出现,一直到现在,已经调试过N个跨域相关的问题了,16年时也整理过一篇相关文章,但是感觉还是差…

如何导入ShareSDK的sample

由于项目需要,最近需要做10几个平台的分享,如果自己去集成,浪费很多时间,而且还很难成功。最后发现Sharesdk,可以满足项目需求。 首先,需要到他们的官网http://sharesdk.cn/下载android版本的SDK。 然后玩了一下他们的…

EF5.x Code First 一对多关联条件查询,Contains,Any,All

背景 通过多个部门id获取所有用户,部门和用户是多对多。 已知部门id,获取该部门包括该部门下的所有子部门的所有用户。 关系如下: public class Entity:IEntity{public Guid Id { get; set; }public string CreateUser { get; set; }public D…

Spring5:@Autowired注解、@Resource注解和@Service注解

From: https://www.cnblogs.com/szlbm/p/5512931.html 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点: 1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如…

CCNA实验(8) -- PPP HDLC

HDLC帧格式与以太帧格式有很大差别,HDLC帧没有源MAC和目的MAC地址。HDLC不能提供验证,缺少对链路保护。Cisco设备与Cisco设备连接,可用HDLC封装。Cisco设备与非Cisco设备连接,应使用PPP协议。PPP经过4个过程在点到点链路上建立连接…

不使用中间变量交换2个数据

2019独角兽企业重金招聘Python工程师标准>>> 第一种方法&#xff1a; <!-- lang: cpp -->aab;ba-b;aa-b;可能产生越界和溢出。 第二种方法&#xff1a; <!-- lang: cpp -->aa^b;ba^b;aa^b;这种方法只适用整形数。 写成宏的形式 <!-- lang: cpp -->…

slf4j的简单用法以及与log4j的区别

From: https://www.cnblogs.com/qlqwjy/p/9275415.html 之前在项目中用的日志记录器都是log4j的日志记录器&#xff0c;可是到了新公司发现都是slf4j&#xff0c;于是想着研究一下slf4j的用法。 注意:每次引入Logger的时候注意引入的jar包&#xff0c;因为有Logger的包太多了。…

JdbcType类型和Java类型的对应关系

From: https://www.cnblogs.com/tongxuping/p/7134113.html 在Oracle中有些字段不是必填时在用户使用的时候会出现数据null的情况。这个时候在Oracle中是无法进行插入的。 1 JDBC Type Java Type 2 CHAR String 3 VARCHAR String 4 L…

MyBatis Generator配置文件翻译

From: https://www.cnblogs.com/GaiDynasty/p/4088531.html <classPathEntry> 驱动文件指定配置项 <classPathEntry location"/Program Files/IBM/SQLLIB/java/db2java.zip" /> <columnOverride> 将数据库中的字段重命名为实体类的属性 colu…

SpringBoot系列十:SpringBoot整合Redis

From: https://www.cnblogs.com/leeSmall/p/8728231.html 声明&#xff1a;本文来源于MLDN培训视频的课堂笔记&#xff0c;写在这里只是为了方便查阅。 1、概念&#xff1a;SpringBoot 整合 Redis 2、背景 Redis 的数据库的整合在 java 里面提供的官方工具包&#xff1a;j…

海贼王革命家—龙—实力到底如何?

龙——整个海贼王世界中最神秘的人物&#xff0c;令世界政府最担心的存在&#xff0c;是所有迷最为期待的实力展现&#xff0c;他的身上好像有着无数的秘密等着尾田为我们揭晓。 路飞的父亲——未来的海贼王、卡普的儿子——海军英雄、革民军首领——唯一可以跟世界政府抗衡的组…

MyBatis 实践

From&#xff1a; https://www.cnblogs.com/luyiba/p/6303717.html MyBatis简介 MyBatis前身是iBatis,是一个基于Java的数据持久层/对象关系映射(ORM)框架. MyBatis是对JDBC的封装,使开发人员只需关注SQL本身,而不需花费过多的精力去处理如注册驱动、设置参数、创建Connectio…

皮克斯背后新技术

2019独角兽企业重金招聘Python工程师标准>>> 皮克斯每创作一部动画作品总会给观众带来或多或少的惊喜&#xff0c;而很多影视动画从业人员也习惯于关注他们的每一部作品的制作&#xff0c;因为新技术往往就在这些制作过程中诞生&#xff0c;如今皮克斯动画已经成为C…

数据结构:二叉查找树(C语言实现)

数据结构&#xff1a;二叉查找树 二叉查找树 基础知识 关于二叉树的基础知识&#xff0c;请看我的一篇博客:二叉树的链式存储 二叉查找树的特征 二叉查找树或者是一棵空树&#xff0c;或者是具有下列性质的二叉树&#xff1a;  1.若其左子树不空&#xff0c;则左子树上所有结…

Effective Java 电子书 apk版本下载

下载安装包以后&#xff0c;安装即可阅读该书了&#xff0c;并且实时展示每章节代码哦&#xff0c;并且可以运行哦&#xff0c;赶快下载体验吧. Effective Java中文第二版下载地址&#xff1a;下载 应用截图&#xff1a; 转载于:https://www.cnblogs.com/spring87/p/6090010.ht…

给你的Mr.Right画张择偶地图像

爱一个人就算做不到爱他的全部&#xff0c;至少也应该尊重他的真实&#xff0c;而不是苛求他变成你想要的样子。 娶妻当娶郭芙蓉&#xff0c;经典语录。我是郭芙蓉&#xff0c;我不会武功&#xff0c;我来自江湖&#xff0c;我与众不同。再苦再累&#xff0c;就当自己是二百五&…

java实现HTTP请求的三种方式

From: https://www.cnblogs.com/hhhshct/p/8523697.html 目前JAVA实现HTTP请求的方法用的最多的有两种&#xff1a;一种是通过HTTPClient这种第三方的开源框架去实现。HTTPClient对HTTP的封装性比较不错&#xff0c;通过它基本上能够满足我们大部分的需求&#xff0c;HttpClien…

SpringBoot时间戳与MySql数据库记录相差14小时排错

From: http://www.cnblogs.com/jason1990/archive/2018/11/28/10032181.html 项目中遇到存储的时间戳与真实时间相差14小时的现象,以下为解决步骤. 问题 CREATE TABLE incident (id int(11) NOT NULL AUTO_INCREMENT,created_time timestamp NOT NULL DEFAULT CURRENT_TIMES…

mysql重置root密码方法

2019独角兽企业重金招聘Python工程师标准>>> 1. 先关闭mysqld 2. 运行&#xff1a; mysqld_safe --skip-grant-tables 3. 另开一个窗口&#xff0c;用 mysql -uroot 登录mysql&#xff0c;执行 UPDATE mysql.user SET PasswordPASSWORD(你的密码) WHERE User…

插入排序之C++实现

描述 插入排序是一种简单直观的排序算法。它的基本思想是将一个待排序的数据序列分为已排序和未排序两部分&#xff0c;每次从未排序序列中取出一个元素&#xff0c;然后将它插入到已排序序列的适当位置&#xff0c;直到所有元素都插入完毕&#xff0c;即完成排序。 实现思路…