Java学习中MVC模式的一些理解

来源:互联网 发布:淘宝店投资多少钱 编辑:程序博客网 时间:2024/05/17 01:17

首先,MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。

 

三层架构:

通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL或SERVICES)、数据访问层(DAO)(data access object)。

表现层实现的代表作品是Struts框架,业务层实现的代表作品是Spring,持久层实现的代表作品是Hibernate。层就相当于一个黑盒子,我们不用知道它内部怎么实现,只需要知道如何去调用它就行了。每层只与上下相邻的两层打交道。当一层内部由于技术变迁发生变化时,只要接口不变,其他层不用做任何改变。分层之后灵活性提高,也便于团队分工开发。

 

MVC和三层架构的区别和联系:

MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。
mvc可以是三层中的一个表现层框架,属于表现层。三层和mvc可以共存。
三层是基于业务逻辑来分的,而mvc是基于页面来分的。
MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以分成M、V、C,(Model View Controller)模型-视图-控制器。

 

在一般的Java程序中,action 是业务层的一部分,是一个管理器 (总开关)(作用是取掉转)(取出前台界面的数据,调用biz方法,转发到下一个action或者页面)。

模型层(model)一般是实体对象(如User类),作用是暂时存储数据方便持久化(存入数据库或者写入文件)。

dao是数据访问层,就是用来访问数据库实现数据的持久化(把内存中的数据永久保存到硬盘中。

总的说来:

Dao主要做数据库的交互工作;

Model 是模型,存放你的实体类;

Service 做相应的业务逻辑处理;

Action是一个控制器。

 

记得以前刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用,其他有意义的事没做,也不明白有这个有什么用,参加工作久了以后就会知道,业务才是工作中的重中之重。

如果熟悉像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。

接下来说一下service的意义,其实因为你现在做东西分层次不是那么严格,在一个你做东西业务本身也少,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里写。

至于你说的为什么要用service层封装,我认为:一般来说,某一个程序的有些业务流程需要连接数据库,有些不需要与数据库打交道而直接是一些业务处理,这样就需要我们整合起来到service中去,这样可以起到一个更好的开发与维护的作用,同时也是MVC设计模式中model层功能的体现。

 

Dao层:一般可以再分为***DaoIface接口和***DaoImpl实现类,如userDaoIface接口和userDaoImpl实现类,接口负责定义数据库curd的操作方法,实现类负责具体的实现,即实现Dao接口定义的方法。

Service层:引用对应的Dao层数据库操作,在这里可以编写自己需要的代码(比如简单的判断),也可以再细分为Service接口和ServiceImpl实现类。

Action层:引用对应的Service层实现业务逻辑,在这里结合Struts的配置文件,跳转到指定的页面,当然也能接受页面传递的请求数据,也可以做些计算处理、前端输入合法性检验(前端可修改网页绕过前端合法性检验,需在后台加一层)。

Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;Service是厨师,action送来的菜单上的菜全是ta做的;Dao是厨房的小工,和原材料(通过hibernate操作数据库)打交道的事情全是ta管。

对象的调用流程:JSP—Action—Service—DAO—Hibernate—数据库。

 

在一个自编的mvc模式的项目中,源文件中各个包的命名规范为:com.公司名.系统名.模块名 。

代码目录结构及其意义为:

Action : 负责页面逻辑,将调用service的结果返回到页面中。

Service : 接口定义 ---impl 接口的实现,负责业务逻辑。

Domain 对应数据库表的pojo。

Dao : 只负责连接数据库,从数据库中查询结果,包装成对象后返回、

util :工具类。

 

0 0
原创粉丝点击