DAO
Data Access Object(数据訪问接口)
一、场景和问题
在Java程序中。常常须要把数据持久化,也须要获取持久化的数据。可是在进行数据持久化的过程中面临诸多问题(如:数据源
不同、存储类型不同、供应商不同、訪问方式不同等等),请问怎样能以统一的接口进行数据持久化的操作?
二、解决方式
看懂这个图,DAO理解的也差点儿相同了。
(因为语文水平的能力啊,等我好好整理一下思路。在更新啊)
三、DAO的理解
DAO在三层结构模式中起来非常大的作用,表现层通过逻辑层调用DAO,然后让DAO去调用数据层。这样非常好的将数据层和其它两层隔离开,安全性和可维护性更高。然后在逻辑层和DAO层有能够建立新的DAO2,这个DAO2的作用就是避免外界直接接触里面的接口,主要通过工厂方法,实现接口的应用,这种目的也是为了提高安全性,并且显得更层次感。
1、DAO事实上是利用组合工厂模式来解决这个问题的,并没有带来新的功能,所以学的事实上就是个思路。
2、DAO理论上是没有层数限制的。
3、DAO的各层理论上是没有先后的。
四、DAO设计模式的结构
DAO设计模式一般分为:
1、值对象模式 (传递參数与返回值)
VO(Value Object):就是存放项目中的一些要对其操作的数据类。
2、DAO模式
DAO接口:用于声明对于数据的操作的方法。
3、面向接口编程 (分层、封装隔离)
DAOImpl:必须实现DAO接口,真实实现DAO接口的函数,仅仅是单纯的处理数据。
4、工厂模式
DAOFactory:工厂类。含有getInstance()创建一个DAOImpl类。
五、DAO模式的本质
一层屏蔽一种变化
六、DAO的优点
DAO的优点就是提供给用户的接口仅仅有DAO的接口。所以假设用户想加入数据,仅仅须要调用create函数就可以。不须要数据库的操作
常见设计模式的应用
一、面向接口编程
1、面向接口编程是第一大原则。
2、在Java程序设计里面。很讲究层的划分和模块的划分。
通常我们依照三层来划分程序。分别UI层、逻辑层(取名business或service)、数据存储层,他们之间都要通过接口来通讯。
3、在每个层里面。又有非常多外小模块,一个小模块对外也应该是一个总体。那么一个模块对外也应该提供接口,其它地方须要使用到这个模块的功能。都应该通过此接口。
二、接口定义中的參数和返回值
问题:接口里面一定会定义接口隔离体部分须要暴露的方法。对于方法就有參数和返回值的定义,究竟须要在接口中怎样描写叙述须要传递的參数呢?
答案:值对象模式给了我们非常好的解决方式。其实,值对象已经成为了不同层或是不同模块之间数据交换的标准方法。它体现的是数据的封装。也利于对象的复用。
三、编程中。外部怎样得到接口
问题:1、我们知道。在Java程序中,使用一个类要先通过new的操作,得到一个类的实例。然后通过这个类实例去调用类的属性和方法。
2、但是接口呢,我们怎么得到它的实例呢?要知道接口是不能直接new操作的,我们之前学过的方式是:Interface inf = new 实现类();
3、可是在面向接口编程的世界里,假设这样做,意味着client必须知道你详细的实现类。这破坏了接口的隔离性。使用接口就是不让外部知道隔离体内部的实现的。怎么办呢?
答案:前面的工厂模式给出了这个问题的解决方式,使用Factory来“生产”接口。对外只提供工厂和接口。
四、内部实现中怎样进行数据存储操作
问题:前面已经学会了怎样设计一个模块对外公开的部分,那么。在内部实现的时候,遇到须要数据存储的时候,我们应该怎么操作呢?
答案:对于这个问题,DAO模式给出了较好的解决方式。
(详细操作看实例-----书店管理系统)
总结
一、Java 程序设计--包结构
Java程序设计的系统体系结构非常大一部分都体如今包结构上
一种典型的Java应用程序的包结构:前缀.应用或项目的名称.模块组合.模块内部的技术实现
1、前缀:是站点域名的倒写,去掉www(如,Sun公司(非JDK级别)的东西:com.sun.* )。
2、当中模块组合又由系统、子系统、模块、组件等构成(详细情况依据项目的大小而定,假设项目非常大。那么就多分几层。
3、模块内部的技术实现一般由:表现层、逻辑层、数据层等构成。
对于很多类都要使用的公共模块或公共类,能够再独立建立一个包,取名common或base,把这些公共类都放在当中。
对于功能上的公用模块或公共类可建立util或tool包,放入当中。
二、设计与实现的经常使用方式、DAO的基本功能
1、 设计的时候:从大到小
先把一个大问题分解成一系列的小问题。或者说是把一个大系统分解成多个小系统,小系统再继续进行往下分解,直到分解到自己可以掌控时。再进行动手实现。
实现的时候:从小到大
先实现组件,进行測试通过了。再把几个组件实现合成模块。进行測试通过。然后继续往上扩大。
2、 最典型的DAO接口通常具有的功能
新增功能、改动功能、删除功能、依照基本的键值进行查询、获取全部值的功能、依照条件进行查询的功能。
3、 一个通用DAO接口模板
4、 UserVO 和 UserQueryVO的差别
UserVO封装数据记录。而UserQueryVO用于封装查询条件