机房收费系统的合作版

概述

       机房收费系统的合作版自己负责的是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年时也整理过一篇相关文章,但是感觉还是差…

centos 7.0防火墙导致vagrant端口映射失败

在vagrant上部署了centos7.0后,Vagrantfile端口转发设置后,宿主机访问客户机站点还是无法访问,问题出在:centos7.0以上版本默认会安装firewalld防火墙, firewalld有区(zone)概念,默认在public区,public:指定外部链接可以进入 先查看下当前端口…

如何导入ShareSDK的sample

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

Spring Boot配置跨域访问策略

From: https://blog.csdn.net/garyond/article/details/80192760 1. 引言 我们在开发过程中通常因为不同应用之间的接口调用或者应用之间接口集成时经常会遇到跨域问题, 导致无法正常获取接口数据,那么什么是跨域? 跨域的解决办法是什么&am…

SPOJ 220 Relevant Phrases of Annihilation(后缀数组+二分答案)

【题目链接】 http://www.spoj.pl/problems/PHRASES/ 【题目大意】 求在每个字符串中出现至少两次的最长的子串 【题解】 注意到这么几个关键点:最长,至少两次,每个字符串。   首先对于最长这个条件,我们可以想到二分答案&…

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文件将会十分庞大;如…

C#通过SSH连接MySql

出于安全考虑,有的时候数据库服务器只能通过SSH访问,比如MySql服务装在了服务器A上,并且A机器只允许B机器才能访问,而部署环境可能在C机器上,这时候就要C服务器通过B服务器连接A服务器,这时候就需要用到SSH…

CCNA实验(8) -- PPP HDLC

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

Spring Boot实战:数据库操作

From: https://www.cnblogs.com/paddix/p/8178943.html 上篇文章中已经通过一个简单的HelloWorld程序讲解了Spring boot的基本原理和使用。本文主要讲解如何通过spring boot来访问数据库,本文会演示三种方式来访问数据库,第一种是JdbcTemplate&#xff0…

PDB调试Python程序

pdb是python内置的调试工具, 它可以在终端中调试Python程序, 这允许pdb在很多无法安装IDE的服务器上使用. 虽然远程调试使用广泛, 但在必要的时候(比如难以在本地搭建运行环境)pdb仍然是一个便利的选择. 我们可以在python源代码中设置断点: i…

不使用中间变量交换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的包太多了。…

PS不能存储,因为程序错误

当PS中遇到不能存储文件&#xff0c;因为程序错误时&#xff0c;可以这样&#xff1a; http://www.zcool.com.cn/article/ZMTgwOTQw.html 转载于:https://www.cnblogs.com/kjcy8/p/6072599.html

MEF相关总结

&#xff08;1&#xff09;蛮好的一篇文章&#xff1a;LoveJenny的MEF 打造的插件系统 一个简单单很能容易理解的例子讲解了MEF. &#xff08;2&#xff09;原理方面的看Bēniaǒ成长笔记的《MEF程序设计指南》博文汇总 &#xff08;3&#xff09;http://www.cnblogs.com/pszw/…

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…

java实现计算字符串表达式

ScriptEngineManager manager new ScriptEngineManager(); ScriptEngine engine manager.getEngineByName("JavaScript");Object result engine.eval("12");转载于:https://www.cnblogs.com/highfly2012/p/6080374.html

Android:Application

1.Application是程序真正的入口&#xff0c;启动时会先执行Application再执行其他组件。2.建立自己的Application类&#xff0c;需要在xml里将application修改自己的application类&#xff1a;<applicationandroid:name"com.example.aexh_19_application.MyApplication…

实体entity、JavaBean、Model、POJO、domain的区别

From: https://blog.csdn.net/u011665991/article/details/81201499 Java Bean、POJO、 Entity、 VO &#xff0c; 其实都是java 对象&#xff0c;只不过用于不同场合罢了。 按照 Spring MVC 分层结构&#xff1a; JavaBean: 表示层 &#xff08;Presentation Layer&#xf…