java之 ------ DAO设计模式的【具体解释】及常见设计模式的【应用】
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用于封装查询条件
java之 ------ DAO设计模式的【具体解释】及常见设计模式的【应用】的更多相关文章
- JavaScript 中常见设计模式整理
开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式.本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知. JavaScript 中常见设计模 ...
- Java的DAO设计模式
用java的DAO模式实现对一个学生实体的增加,查询操作. 1.建立一个学生实体类 Student.java public class Student { private String sid; pr ...
- java中dao层和service层的区别是什么?
首先解释面上意思,service是业务层,dao是数据访问层.呵呵,这个问题我曾经也有过,记得以前刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用 ...
- java中dao层和service层的区别是什么
dao层中已经有操作数据库的方法了,为什么还要service层去封装?有什么好处? tanghui12321 | 浏览 131990 次 我有更好的答案 推荐于2017-10-06 18:44:5 ...
- BATJ高级Java面试题分享:JVM+Redis+Kafka +数据库+设计模式
话不多说,直接上面试题,来看一下你还欠缺多少? Mysql 与 Oracle 相比, Mysql 有什么优势? 简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别? ...
- Spring-mybatis没有了XXXmapper.java和Dao的实现类还有Service的实现类
对于刚学过框架的同学可能知道,mybatis有两种主要的配置文件: SqlMapConfig.xml(mybatis全局配置文件,名称不固定,用来配置运行环境(数据源.事务) XXXmapper.xm ...
- JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片
JAVA之旅(二十六)--装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片 一.装饰设计模式 其实我们自定义re ...
- Java进阶(十五)Java中设置session的详细解释
Java中设置session的详细解释 简单通俗的讲session就是象一个临时的容器,用来存放临时的东西.从你登陆开始就保存在session里,当然你可以自己设置它的有效时间和页面,举个简单的例子: ...
- 初探Java设计模式4:JDK中的设计模式
JDK中设计模式 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助.一.设计模式是什么(1)反复出现 ...
随机推荐
- iOS 使用脚本自动化复制target
有些项目成熟以后,就会有需求自动化配置生成一个全新的项目,不需要再让开发人员手动修改工程文件,将配置化工作直接移交给运维或者配置团队去做 其实按照普通的做法,无非就是在xcode里将目标target ...
- 编写函数int count_number_string(char str[])和函数int maxnum_string(char str[])
题目如图: 这里不再赘述 代码: //字符串中统计与查询 //杨鑫 #include <stdio.h> #include <stdlib.h> #include <st ...
- linux下安装redis3.2
这部分来自网络: http://blog.csdn.net/cuibruce/article/details/53501532 1.下载 下载地址:http://www.redis.io/downlo ...
- 英语发音规则---R字母
英语发音规则---R字母 一.总结 一句话总结: 1.在词首和词中时,字母r常读作摩擦辅音/r/? red /red/ n. 红色 ruler /'ruːlə/ n. 尺:统治者 rub /rʌb/ ...
- 洛谷P4012 深海机器人问题(费用流)
题目描述 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生物标本.沿途生 ...
- sql:String格式转换为时间进行比较
字符串的格式为 yyyy-MM-dd HH:mm:ss str_to_date(a.time, '%Y-%m-%d %k:%i') < str_to_date(b.time, '%Y-%m-%d ...
- const使用总结
1.常变量: const 类型说明符 变量名 const int a; 常引用: const 类型说明符 &引用名 const int &a; 常对象: 类名 cons ...
- POJ 1458 Common Subsequence 【最长公共子序列】
解题思路:先注意到序列和串的区别,序列不需要连续,而串是需要连续的,先由样例abcfbc abfcab画一个表格分析,用dp[i][j]储存当比较到s1[i],s2[j]时最长公共子序 ...
- GCD与dispatch_group总结
GCD 可以看作是集合类的操作: 集合是queue,元素是block: 集合只能添加对象,删除对象由系统完成. 同理,NSOperationQueue也可以看作是一个集合管理器. dispatch_g ...
- Chrome添加Unity本地文档引擎
前提:输入Unity后出来的第一连接 浏览器的设置: 分别填入: UnityDocs unity3d.com/cn file:///Applications/Unity/Documentation/e ...