Java分层设计-DAO设计模式

主要内容

  • 分层设计的原理
  • 数据访问层。
  • 业务层

针对每个标题,重点介绍了本层开发标准和设计模式,简单介绍了开发规范和一些原理

简述

DAO是数据访问对象的简称(Data Access Object),是数据访问层(也可以称为数据层)的一种对象。实际开发中,可以将项目分层为显示层,控制层,业务层,数据访问层,数据库。
通常来看,我们要做一个项目,比如说一个客户端,我们想要什么样的外观,这是显示层要解决的问题,我们想要实现什么样的功能,这是业务层要解决的问题,也就是业务层要提供的业务服务。
业务层在实现相应的功能的时候,需要访问数据库,而访问数据库无非就是基于增删改查等这些原子操作,因而数据访问层实际上是面向数据库的增删改查操作而设计的,业务层通过调用数据访问层提供的服务实现业务处理。
数据访问层实际上就是对业务层的业务逻辑的一种再分解。我通常理解为,数据访问层实际上就是用Java语句来执行SQL语句的。对于数据的存储,数据库中使用数据表,在程序中要使用对象,对象是对数据库中数据表的一种建模,对象名一定要与数据库中数据表的名称一致,这些对象就是简单Java类(JavaBean),通过这些简单Java类来存储和运输数据。
显示层要使用一些UI元素来展示数据或者提供用户进行操作,而显示层实现一些功能的时候就要依赖于控制层对业务层的调用。
在项目准备的时候,我们需要提前定义好数据库连接的工具类。数据库的打开和关闭在业务层实现比较合理,因此数据层的数据访问对象只需要进行定义数据库操作,而不需要负责资源的打开和关闭。业务层也只是调用数据库工具类提供的方法而已,严格来说,数据库工具类应该单独的作为一个工具包进行设计和开发。
在这里插入图片描述

接口

  • 接口首先定义了本层的开发标准。然后依据已经定义好的标准进行开发。
  • 接口方便独立的层之间服务的调用。两个独立的层之间进行服务,必须依赖一定的标准,比如数据层和数据库之间的JDBC。

数据访问层

开发数据访问层标准:
在开发数据访问层的时候,首先开发数据访问层接口,提供数据访问层开发的标准。命名方式严格使用xxxDao。数据层执行的只是原子性的操作,对数据的增删改查,和一些统计性的描述。接口开发时注意异常分析,对参数的注释、对方法和属性的注释,对异常的注释。

设计模式:
外层需要调用服务,而不需要知道子类的具体设计,使用工厂模式。
工厂类提供特定的方法,每个方法提供特定的DAO对象,外层得到了特定的DAO对象的时候就能够调用本层提供的服务。这样就增加了不同层之间的独立性。在业务层需要使用数据访问层的服务的时候,只需要将注意力放在工厂类上即可,从工厂类中获得指定的数据访问对象。

数据层操作标准:
对于数据层操作的接口的开发,注意命名标准,严格使用如下命名方式。
数据更新:doXxx()。doCreate(),doUpdate(),doRemove()
数据查询:包括两种查询,
1、查询数据表中的数据:findXxx()。findByID(),findByName()
2、查询数据表中的统计信息:getXxx()。getAllCount()
在设计接口的时候,要写清楚属性和方法的注释。需要考虑会抛出什么异常,分析sql相关异常。异常处理:一步步的往上抛出。

简单Java类的开发规范:

  • 考虑到日后有可能出现分布式的应用,所以简单java类必须实现java.Serializable接口
  • 简单Java类名称与表名称一致
  • 类中的属性不允许使用基本数据类型,必须使用基本数据类型对应的包装类,为了使用null
  • 类中至少有一个无参构造方法
  • 对数据库中的每个实体表都要写简单Java类

业务层

开发业务层标准:
在开发业务层的时候,首先开发业务层接口,提供业务层开发的标准。命名方式建议xxxService。业务层进行的是更为复杂的增删改查,或者说是更为复杂的功能的实现。而数据层执行的只是原子性的操作。同样的,接口开发时注意异常分析,对参数的注释、对方法和属性的注释,对异常的注释。

设计模式:
同样的,业务层也提供实现一个工厂类,该工厂类够提供业务处理对象,这样就实现了通过该工厂类向外层提供服务。不同层之间的服务调用依靠工厂类和接口,不需要知道具体的子类实现,这样来看,控制层不需要知道数据库的连接和关闭。

业务层开发规范:

  • 业务层尽量使用基本类型,而数据层尽量使用包装类型。
  • 业务层必须知道数据层的方法,而不需要知道具体的实现。在开发的业务层的时候,最好熟悉数据层的方法,方便调用服务。
  • 业务层实现类的核心功能是:负责数据库的打开和关闭,取得数据访问对象,使用数据访问对象提供的服务完成功能的设计。
  • 业务层处理业务的时候,无论是否有异常都需要进行数据库的关闭。这就要使用try-catch-finally。(可以在开发业务层接口(抽象类)????的时候就提供部分代码。)

业务层的两类:

  • 前台业务:给前台开发
  • 后台业务:给后台管理员

工厂类

工厂类更像是一个工具箱,将本层所有的工具集成在一个类中,对外提供工具的获取方式,在使用工具的时候只需要关注工厂类就可以了。这是非常符合我们的习惯的,我们通常关注的是工具的获取和使用而不是工具的具体实现。

业务测试

在test子包中进行测试。
明确这里的测试对象,这里主要是对业务进行测试,因此使用的主要就是业务层工厂类。可以使用Junit进行测试。
对业务层提供的每个业务分别创建测试对象进行测试。实际上业务层提供的业务与我们的功能需求是相对应的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章