无论是一个应用程序项目还是一个Web项目,我们都可以按照分层思想进行程序设计。对于分层,当下最流行划分方式是:表现层+控制层+业务层+数据层。其中,业务层和数据层被统称为后台业务层,而表现层和控制层属于前台。整个项目最核心的部分就是后台业务层的实现。

数据层:又被称为数据访问层(Data Access Object DAO),是专门完成一个个原子性操作的数据库开发,如对数据的更新(插入,修改,删除)和查询(单个查询,查询全部,模糊查询等),在数据层中最需要控制的就是JDBC的PreparedStatement接口的使用。

业务层:又被称为业务对象(Business Object BO)、服务层(Service Object),它体现了整个程序提供的操作功能,一个业务层的操作实现,需要涉及多个数据层的操作。

以下对员工表(emp)的操作为例,讲解数据层和业务层的实现

首先员工表的结构:emp(empno,ename,job,hiredate,sal,comm),客户提出的对员工的需求可以大致划分为以下几个操作:

1实现雇员数据的添加,保证雇员编号不重复

2实现对雇员信息的修改

3实现对雇员的批量删除

4根据雇员编号查询指定雇员信息

5查询所有雇员信息

6模糊查询复合条件的雇员信息和统计人数

我们以SQL Server数据库开发为例进行项目的开发

准备阶段

1数据库连接类DatabaseConnection

因为涉及到对数据库开发操作,需要取得数据库的连接对象以及关闭,因此可以专门定义一个类管理数据库的连接与关闭,类的设计如图

2简单Java类

因为我们要操作的是指定表中的数据项,所以数据结构也必须要与表结构意义对应。简单java类(po,vo,pojo,to)

注意在实际开发中,对简单java类有几点要求

l           考虑到日后程序有可能出现分布式应用问题,所以简单java类必须要实现java.io.Serializable接口;

l  简单java类的名称必须与表名称保持一致;

有可能采用这样的命名:student_info 类名为StudentInfo

l  类的属性不允许出现基本数据类型,都必须使用基本数据类型的包装类

基本数据类型默认值为0,而包装类默认值为null;

l  类中的属性必须使用private封装,封装后的属性必须提供有getter、setter方法

l  类中可以有多个构造方法,但是必须有一个无参构造方法

开发数据层

数据层最终是要交给业务层去调用,所以应该为数据层的操作指定标准,即应该定义数据层开发的接口标准。,这样业务层只需要通过接口即可实现数据层的访问,而无需知道操作细节。

1开发数据层的操作标准

l  对于整个数据层的开发严格讲就是只有两类功能:

|-数据更新:建议它的操作方法以doXxx()形式命名

|- 数据查询,对于查询分两种形式:

|- 查询表中数据:以findXxx()形式命名,例如:findById(),findByName()

|- 统计表中的数据:以getXXX()形式命名,例如:getAllCount()

2数据层的实现类

数据层需要被业务层调用,数据层需要进行数据库的执行(PreparedStatement),由于在实际开发之中一个业务要执行多个数据层的调用,所以数据库的打开与关闭由业务层负责比较合理

3工厂模式提供对不同层间的访问接口

 

package cn.mldn.factory;

import java.sql.Connection;

import cn.mldn.dao.IEmpDAO;

import cn.mldn.dao.impl.EmpDAOImpl;

public class DAOFactory {

         public static IEmpDAO getIEmpDAOInstance(Connection conn) {

                   return new EmpDAOImpl(conn);

         }

}

开发业务层

1业务层操作标准

2业务层实现类

业务层实现类的核心功能:

l  负责数据库的打开与关闭,当存在了业务层对象后就是为了操作数据库:即业务层之后就必须准备好数据库的连接;

l  根据DAOFactory调用getIEmpDAOInstance()方法而后获取IEmpDAO接口对象

不同层之间的访问依靠的就是工厂类和接口进行操作

3业务层的工厂类

在实际编写中,子类永远都是不可见的,同时在整个操作里面,控制层完全看不见数据库的任何操作(没有任何的JDBC代码)

总结

通过分层设计思想以及接口设计原则,我们可以将复杂的业务需求转变为一个个简单的分层业务处理,在设计中关键是对分层的程度进行控制,纪要保持类中内部的聚合性强,又要搜鞍山解耦类之间的联系,计量做到“松耦合强内聚”的设计架构准则。

程序设计分层思想和DAO设计模式的开发的更多相关文章

  1. JavaWeb开发中的分层思想(一)

    JavaWeb开发分层思想(一) 一.认识DAO.Service.Controller层 DAO(Data Access Object) 1.直接看英文意思就是"数据访问对象",也 ...

  2. Java Dao设计模式

    一.信息系统的开发架构   客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/S ...

  3. Robot Framework自动化测试(四)--- 分层思想

    谈到Robot  Framework 分层的思想,就不得不提“关键字驱动”. 关键字驱动: 通过调用的关键字不同,从而引起测试结果的不同. 在上一节的selenium API 中所介绍的方法其实就是关 ...

  4. JavaScript设计模式与开发实践 - 策略模式

    引言 本文摘自<JavaScript设计模式与开发实践> 在现实中,很多时候也有多种途径到达同一个目的地.比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但 ...

  5. jsp DAO设计模式

    DAO(Data Access Objects)设计模式是属于J2EE体系架构中的数据层的操作. 一.为什么要用DAO? 比较在JSP页面中使用JDBC来连接数据库,这样导致了JSP页面中包含了大量的 ...

  6. Robot Framework自动化测试四(分层思想)

    谈到Robot  Framework 分层的思想,就不得不提“关键字驱动”. 关键字驱动: 通过调用的关键字不同,从而引起测试结果的不同. 在上一节的selenium API 中所介绍的方法其实就是关 ...

  7. java之 ------ DAO设计模式的【具体解释】及常见设计模式的【应用】

    DAO Data Access Object(数据訪问接口) 一.场景和问题 在Java程序中.常常须要把数据持久化,也须要获取持久化的数据.可是在进行数据持久化的过程中面临诸多问题(如:数据源 不同 ...

  8. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  9. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

随机推荐

  1. 毕业设计预习:maxplus2入门教程

    maxplus2入门教程 一.安装配置(maxplus2.zip) 下载安装完成后,运行maxstart.exe,显示如下错误提示: 为节省配置工作,在E:盘下新建maxplus2文件夹,仅将所需附加 ...

  2. bzoj : 4504: K个串 区间修改主席树

    4504: K个串 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 268  Solved: 110[Submit][Status][Discuss] ...

  3. Java基础-面向接口编程-JDBC详解

    Java基础-面向接口编程-JDBC详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JDBC概念和数据库驱动程序 JDBC(Java Data Base Connectiv ...

  4. 转:String StringBuffer StringBuilder区别

    转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...

  5. CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries

    https://www.codechef.com/DEC17/problems/CHEFEXQ 题意: 位置i的数改为k 询问区间[1,i]内有多少个前缀的异或和为k 分块 sum[i][j] 表示第 ...

  6. bzoj千题计划144:bzoj1176: [Balkan2007]Mokia

    http://www.lydsy.com/JudgeOnline/problem.php?id=1176 CDQ分治 #include<cstdio> #include<iostre ...

  7. Golang入门教程(一)GOPATH与工作空间(Windows)

    https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.2.md Windows 环境: 下面我就 ...

  8. java Apache common-io 讲解

    Apache common-io用户指南 用户指南 Commons-io 包含utility classes,endian classes,line iterator,file filters,fil ...

  9. python学习笔记3-函数的递归

    递归就是指自己函数的自我调用 #递归 #自己调用自己,函数的循环 def test1(): num = int(input('please enter a number:')) if num%2==0 ...

  10. 【CodeForces】961 F. k-substrings 字符串哈希+二分

    [题目]F. k-substrings [题意]给定长度为n的串S,对于S的每个k-子串$s_ks_{k+1}...s_{n-k+1},k\in[1,\left \lceil \frac{n}{2} ...