一篇带你走进程序设计的准则——DAO和MVC设计模式

一、DAO设计模式

DAO最适用于单系统应用程序或小范围本地分布式应用程序使用

1. DAO简介

DAO(Data Access Object,数据访问对象)的主要功能就是操作数据库,也就是数据的增删改查。

接下来分别介绍每一层的功能。

(1)客户层:目前采用B/S开发架构居多,客户使用浏览器访问,当然也可以使用别的工具访问。

(2)显示层:使用JSP/Servlet进行页面显示。

(3)业务层:负责将DAO层的操作进行组合,形成一个完整的业务逻辑。

(4)数据层:提供原子性操作,比如增加、删除、修改、查询。

2.DAO各部分详解 

DAO的设计流程(包括6个部分)如下。

1. DatabaseConnection设计一个专门负责打开连接数据库和关闭数据库操作的类。命名规则:×××.dbc.DatabaseConnection。

2. VO设计VO(值对象),其主要由属性、setter和getter方法构成,与数据库中的字段项对应。命名规则:×××.vo.ttt;ttt要与数据库中的表的名字一致。

3. DAO定义一系列的原子性操作,如增删改查等操作的接口。命名规则:×××.dao.I×××.DAO。

4. Impl设计DAO接口的真正实现的类,完成具体的数据库操作。但是不再去负责数据库的打开和关闭。命名规则:×××.dao.impl.×××DAOImpl。

5. ProxyProxy代理类的实现:主要将以上4部分合起来,完成整个操作过程。命名规则:×××.dao.proxy.×××Proxy。

6. FactoryFactory类主要用来获得一个DAO类的实例对象。命名规则:×××.factory.DAOFactory。一个好的程序必须要有严格的命名要求,在使用DAO时一定要按照以上设计流程的命名方法去命名。

3.JDBC与DAO (具体看后面实例)

步骤1:创建数据库。根据以上表结构创建数据库表,在此使用MySQL数据库。

步骤2:创建好数据库之后,接下来定义VO类,注意命名规范——类名与表名一致,首字母大写。

步骤3:定义一个数据库连接类,主要功能是数据库的打开与关闭,为了方便我们将所有的异常向上抛出到调用方法。

步骤4:新建DAO接口,DAO接口在DAO设计模式中是最重要的,在定义DAO接口之前要先了解详细的业务逻辑,比如上面创建的表要完成什么功能。这个实例将会完成数据库表数据的增加、查询所有以及按编号查询。

在定义接口的时候,接口名前面加了一个I,这是接口的命名规范,表示这是一个接口。

步骤5:DAO接口定义完成之后,就要写具体的实现类。分为两种,一种是真实实现类,还有一种是代理操作类。真实实现类负责数据库的具体操作,不包括数据库的打开与关闭;代理操作类真正负责的就是数据库的打开与关闭。

步骤6:编写工厂类。这个类的功能就是直接返回DAO接口的实例化对象,也就是说在客户端直接通过工厂类就可以获取DAO接口的实例化对象。

二、MVC设计模式

MVC全名是Model View Controller,是Model(模型)- View(视图)-Controller(控制器)的缩写。MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

1. MVC简介

那么Model、View、Controller分别在应用程序中代表什么呢?

(1)Model(模型)是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。

(2)View(视图)是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。

(3)Controller(控制器)是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。 

为什么要把应用程序分为三层呢?

(1)MVC分层有助于管理复杂的应用程序,因为用户可以在一段时间内专门关注一个方面。例如,用户可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。

(2)MVC分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。 

MVC框架的主要内容

MVC指MVC模式的某种框架,它强制性地使应用程序的输入、处理和输出分开。

使用MVC的应用程序被分成三个核心部件:模型、视图、控制器,它们各自处理自己的任务。

最典型的MVC就是JSP +Servlet + JavaBean的模式,其工作原理图

视图是用户看到并与之交互的界面。

模型表示企业数据和业务规则。

控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。

设计模式和框架的区别

框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。

在软件生产中有三种级别的重用:

①内部重用,即在同一应用中能公共使用的抽象块;

②代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域中都能使用;

③应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。

框架与设计模式虽然相似,但却有着根本的不同。

设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;

框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;

设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。

可以说,框架是软件,而设计模式是软件的知识

2.主要流行框架简介 

成熟框架

1)Hibernate框架(Hibernate是一种ORM框架)

       使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接,使用复杂的SQL语句进行读写,关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。

        jjj这时出现了Hibernate框架,它需要用户创建一系列的持久化类,每个类的属性都可以被简单地看作和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表间关联的对应。当我们需要相关操作时,不用再关注数据库表。不用再去一行行地查询数据库,只需要持久化类就可以完成增删改查的功能。这就使我们的软件开发真正面向对象,而不是面向混乱的代码

2)Struts 2框架

       Struts 2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。

       Struts 2引入了几个新的框架特性:从逻辑中分离出横切关注点的拦截器、减少或者消除配置文件、贯穿整个框架的强大表达式语言、支持可变更和可重用的基于MVC模式的标签API。Struts 2充分利用了从其他MVC框架学到的经验和教训,使得Struts 2框架更加清晰灵活。

3)Struts框架(目前已淘汰)

4)MyBatis框架

      MyBatis本是Apache的一个开源项目iBATIS,2010年这个项目由Apache Software Foundation迁移到了Google Code,并且改名为MyBatis。2013年11月迁移到GitHub。iBATIS一词来源于“Internet”和“Abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。

5)Spring框架

       调用者依赖被调用者,它们之间形成了强耦合,如果想在其他地方复用某个类,则这个类依赖的其他类也需要包含,程序就会变得很混乱,每个类互相依赖互相调用,复用度极低。如果一个类做了修改,则依赖它的很多类都会受到牵连。为此,出现了Spring框架。

        Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松地通过XML配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以Spring框架最核心的就是所谓的依赖注射和控制反转。

6)Spring MVC框架

       Spring MVC属于Spring FrameWork的后续产品,已经融合在Spring Web Flow里面。Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,从而在使用Spring进行Web开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts 1、Struts 2等。

       它是一个典型的教科书式的MVC框架,而不像Struts等都是变种或者不是完全基于MVC系统的框架,对于初学者或者想了解MVC的人来说Spring是最好的,它的实现就是教科书!第二,它和Tapestry一样是一个纯正的Servlet系统,这也是它和Tapestry相比Struts所具有的优势。而且框架本身有代码,看起来容易理解。

7)ZF框架

8).NET框架

正在兴起的框架(不过多介绍)

1)Jersey框架

2)Spring Boot框架

        Spring Boot框架,被称作一栈式解决方案,比较轻量,也是当前微服务下的趋势。Spring Boot本身就是构建于Spring之上,各种思想和特性无须多说,去掉了Spring烦琐的配置,简化了原有Spring开发的流程,提供了各种实用的特性,如metric、actuctor等。最重要的是,Spring Boot附带了整个Spring Cloud生态。两个框架对解决大、中、小项目都没有任何问题。

3)Play框架

4)JFinal框架

三、综合案例

 

 

 

 

 

 

 

 

 四、就业面试解析与技巧

 面试官:什么是DAO模式?

应聘者:DAO模式是标准的J2EE设计模式之一,开发人员使用这个模式把底层的数据访问操作和上层的业务逻辑分开,此模式的主要作用是封装对数据库的各种操作。从DAO设计模式的运行原理去叙述即可。

面试官:DAO由哪几部分组成?

应聘者:DAO由以下6部分组成。

DatabaseConnection:专门负责数据库打开与关闭操作的类。

VO:主要由属性、setter、getter方法组成,VO类中的属性与表中的字段相对应,每一个VO类的对象都表示表中的每一条记录。

DAO:主要定义操作的接口,定义一系列数据库的原子性操作,例如增删改查等。

Impl:DAO接口的真实实现类,主要完成具体数据库操作,但不负责数据库的打开和关闭。

Proxy:代理实现类,主要完成数据库的打开和关闭,并且调用真实实现类对象的操作。

Factory:工厂类,通过工厂类取得一个DAO的实例化对象。

 面试官:你能解释下MVC的完整流程吗?

应聘者:MVC(模型、视图、控制器)架构的控制流程为:所有的终端用户请求被发送到控制器,控制器依赖请求去选择加载哪个模型,并把模型附加到对应的视图,附加了模型数据的最终视图作为响应发送给终端用户。

面试官:使用MVC有哪些好处?

应聘者:MVC有以下两个大的好处。

(1)分离了关注点。后台代码被移到单独的类文件,可以最大限度地重复利用代码。

(2)自动化UI测试成为可能,因为后台代码移到了.NET类,这让我们更容易进行单元测试和自动化测试。

 

 

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问题。首先,MVC是一种常见的软件架构模式,它将应用程序分为三个核心部分:模型、视图和控制器。DAO是数据访问对象的缩写,它是一种数据访问设计模式,用于将数据访问逻辑与业务逻辑分离。 对于一个web购物系统,我们可以按照以下步骤进行设计和实现: 1. 模型层:模型层负责处理数据的存储和管理。我们可以使用数据库来存储商品信息、订单信息等。使用DAO设计模式,我们可以创建一个商品DAO和一个订单DAO,用于处理数据的增、删、改、查等操作。同时,我们也需要定义商品和订单的数据模型,以便在控制器和视图中进行使用。 2. 视图层:视图层负责呈现数据给用户。我们可以使用HTML、CSS和JavaScript等技术来设计和实现网页界面。在实现网页界面时,我们可以使用模板引擎来动态生成HTML代码,以便根据数据模型中的内容来呈现不同的页面。 3. 控制器层:控制器层负责处理用户的请求和业务逻辑。我们可以使用PHP、Java或其他编程语言来实现控制器层。在控制器层中,我们可以调用商品DAO和订单DAO中的方法来访问数据库,并根据用户的请求来实现不同的业务逻辑。例如,当用户提交订单时,我们可以从商品DAO中查询商品信息,并将订单信息插入到订单DAO中。 以上就是使用MVC+DAO设计模式设计实现一个web购物系统的大致思路。当然,在实际开发中,还需要考虑安全性、性能优化、用户体验等方面的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值