MVC的设计模式在JavaWeb中的实现
servlet(controller)+jsp(view)+javabean(model)
那么经典的三冊架构的体系图例如以下:
那么看一下上述架构的使用。
在中心的黄色部分:也就是服务端部分。层与层之间的调用关系。
举一个样例:
web层:UserServlet.java类
service层:UserService类
dao层:UserDao类
javaBean:user
那么层与层之间的调用关系就该是这样:
在UserServlet.java中调用UserService。
那么调用的方式仅仅能是在UserServlet类中去创建UserService的对象。
例如以下:
class UserServlet{
UserServcie userService=new UserService();
//调用userService的相关方法进行业务逻辑的操作
。。。。
}
同理:UserService调用UserDao的时候,也有类似上述的代码。
有上述的分析得出结论1:
1.那么上述代码之间的层与层之间的关系就非常紧密。
是违背了软件project的设计思想的。
软件project要求,模块与模块之间的耦合式越低越好。一句经典的软件project设计的话是这种。
“高内聚。低耦合”。
同一时候上述的dao层,我们看一下既有对xml的操作,也有对db的操作。甚至还有很多其它。
得出了结论2:
2.上述架构。同一时候违背了“高内聚。低耦合”中的高内聚的思想。
于是上面的架构体系又有了例如以下的增进:
对于上述的架构图进行分析:
看service层,dao层
1.解决dao层的内聚问题。把xmlDao和dbDao进行分离。
2.对dao层抽取一个共性的接口出来。Dao接口
分析:之前的架构中,service层调用dao层是这种。
UserService中须要写这种代码:XmlDao xmlDao=new XmlDao()//此时没有接口
加上接口以后,Dao dao=new XmlDao();
3.加入工厂
上面的写法变成:Dao dao=Factory.getXmlDao();
那么工厂怎样调用dao层的相关方法呢?假设直接调用,出现的结果是尽管攻克了service层和dao层之间的耦合关系。可是事实上仅仅只是演变
成了工厂和dao层之间的高耦合。
那么增加了xml技术,工厂通过读取xml文件,然后利用java的反射,去创建所需创建的对象就ok了。
而在xml中仅仅要提供了类的全路径。然后做相关配置。目的是方便工厂去读取xml文件去创建对象。
4.加入配置文件。
配置文件不过字符串,和dao层之间没有耦合关系。
总结:对于第三种架构(高内聚,低耦合),便于维护,便于扩展。
为什么便于扩展。举个样例:比方,dao层中。又有了新的持久化技术。service层实际上无所知道不知道,仅仅要改动配置文件。工厂就会去有
对应的操作。这样一来。是不是便于维护和扩展。
上面了,我们看了service层。dao层,通过接口。工厂类,配置文件的方式实现了解耦。
同理,web层,service层也能够通过同样的方式的进行解耦。在上图中没有全然体现。
随着技术的发展。出现了非常多mvc的框架比方struts+spring+hibernate/springMvc.
在刚出现这些框架的时候。基本上都是通过上述方式进行解耦。
用过框架的人都知道,框架多基于配置文件。反射原理,内省等。
再发展了现在,搞架构的那些人,认为。写配置文件也非常费劲,就有了现在的基于注解模式的框架设计。
可是。上述的架构思想,和演变过程,是后期框架技术的源头哦。
后期,我也会对JavaWeb项目开发过程的框架技术结合MVC设计模式做更深入的分析。通常javaweb+框架技术的开发。被人们称
作java企业级开发。也就比較的流行的J2EE/JAVAEE.
使用分包描写叙述结构
com.ghsy ,公司域名倒写(安徽安庆高恒塑业有限责任公司)
com.ghsy.项目名称
com.ghsy.项目名称.dao
dao接口
com.ghsy.项目名称.dao.impl
dao实现类
com.ghsy.项目名称.service
service接口
com.ghsy.项目名称.service.impl
service实现类
com.ghsy.项目名称.web.servlet
servlet处理类
com.ghsy.项目名称.web.filter
过滤器处理类
com.ghsy.项目名称.web.listener
监听器处理类
com.ghsy.项目名称.domain
javabean 封装数据(bean)
com.ghsy.项目名称.utils
工具类
com.ghsy.项目名称.exception
自己定义异常
com.ghsy.项目名称.constant
java常量 Xxx.NAME
/WEB-INF/ jsp页面,安全
* 使用请求转发显示jsp页面
MVC的设计模式在JavaWeb中的实现的更多相关文章
- iOS中MVC等设计模式详解
iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...
- MVC设计模式在网站中的应用
MVC设计模式在网站中的应用 以淘宝的购物车为例 一.结合六个基本质量属性 可修改性 采用MVC设计模式的时候,可以将视图.模型.控制器分析,将用户动作.数据表示.应用数据分离开来,如果用户需要以不同 ...
- JavaWeb中的MVC 下
代码较多,请先略过代码,看懂逻辑在研究代码 引入 回顾上一节中的项目,最终的层次结构: 在MVC上中,我们分析了MVC设计模式具备的优点,以及不足,并在其基础上增了Service层用于处理业务逻辑,但 ...
- MVC框架模式和Javaweb经典三层架构
一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(Vie ...
- [Head First设计模式]山西面馆中的设计模式——观察者模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...
- 浅谈 MVVM 设计模式在 Unity3D 中的设计与实施
初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到 ...
- 三层架构与MVC & 设计模式的较量
刚刚学习了三层架构,并且正在实际应用中,但随着学习的深入,又了解到了一个叫MVC的东西,(早在设计模式中就听到过MVC,仅仅是简单查了一下什么意思.)如今正好把这三个东西放在一起聊聊. 三层 是一个分 ...
- MVC架构在Asp.net中的应用和实现
转载自:http://www.cnblogs.com/baiye7223725/archive/2007/06/07/775390.aspx 摘要:本文主要论述了MVC架构的原理.优缺点以及MVC所能 ...
- JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用
JavaWeb中监听器+过滤器+拦截器区别.配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->fil ...
随机推荐
- 2、Flask实战第2天:URL传参
当我们访问网站/的时候,会执行hell_world函数,并把这个函数的返回值返回给浏览器,这样浏览器就显示hello world了 @app.route('/') def hello_world(): ...
- 转 select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型:int select(int maxfd,fd_set *rdset ...
- ProgressDialog进度条对话框
(一) 1.效果图: 2.activity_main.xml <?xml version="1.0" encoding="utf-8"?> < ...
- javolution-core-java-6.1.0.jar 的使用
官方网址:http://javolution.org/apidocs/javolution/io/Struct.html 第一步:导包 第二步:创建继承的结构体 结构体定义如下所示: public c ...
- SQLSERVER LATCH WINDBG
https://mssqlwiki.com/2012/09/07/latch-timeout-and-sql-server-latch/
- 论文中的state-of-the-art
最近看了几篇计算机顶会和SCI,摘要里经常出现这个词,我以为是什么算法,查阅的知是“当前最高水平”,我记得老师说不能有这种模糊词语,需要表明提高了多少,看来论文都很水,即便是IEEE,SCI.
- Android集成友盟社会化分享功能
1. 产品概述 友盟社会化组件,可以让移动应用快速具备社会化分享.登录.评论.喜欢等功能,并提供实时.全面的社会化数据统计分析服务. 指南将会手把手教你使用社会化组件SDK,用5分钟为APP增加新浪 ...
- 各种Lisp系语言大检阅
主要特色: CommonLISP : lisp系集大成者, 工业化强度的大型语言. 拥有理论上最高的表达力, 非常复杂, 学习难度极大. 喜欢的人捧到天上, 觉得它是一切语言的终点, 不喜欢的人恶心死 ...
- linux基础-第十九单元_nfs服务
#服务端部署 介绍: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的 ...
- D3.js系列——比例尺和坐标轴
比例尺是 D3 中很重要的一个概念.绘制图形时直接用数值的大小来代表像素不是一种好方法,本章正是要解决此问题. 一.为什么需要比例尺 上一章制作了一个柱形图,当时有一个数组,绘图时,直接使用 250 ...