大数据WEB阶段(十四)JavaEE开发模式
来源:互联网 发布:sqlserver免费版 编辑:程序博客网 时间:2024/06/05 17:48
JavaEE开发模式
零、目录
- 开发模式发展历程
- MVC设计思想的出现
- JavaEE经典三层架构
- 经典三层架构解耦
一、开发模式发展历程
- Servlet是JavaEE开发中一种动态web资源开发技术 , 但是在做输出响应页面时及其繁琐 。
- JSP表面看上去像是Html , 但本质上是Servlet ,可以在其中插入java代码 , 所以也是一种动态web资源 , 他能更好的用于展示页面 , 也能处理一些业务逻辑 。
- JavaEE开发模式一: JSP+JavaBean
- JavaEE开发模式二: Servlet+JSP+JavaBean
二、MVC思想的出现
- 在开发模式的发展中 , 一些人总结出软件可以人为地分为Model 、 View 、 Controller三部分 , 也就是MVC设计模式的出现 。
- MVC设计模式要求这三部分尽量独立开来 , 互不干扰 , 这样使程序结构清晰 ,便于开发和维护
三、JavaEE的经典三层架构
- 开发者将MVC设计思想融入了JavaEE开发模式中 ,由此衍生出了JavaEE开发的经典三层架构 。 将JavaEE的开发过程分为web层 、 service层 、 dao层 三层。
- 分层的优势:
- 分层 的目的在于代码更具有优良的结构 , 便于开发和维护 。
- 便于层与层之间实现代码的复用 , 减少代码的冗余 。
- 在更改某一模块时可以不影响其他模块的使用 , 实现模块的复用 。
- 如:需要将底层的数据库换为Orcal时, 不需要 更改Web层和Service层 。
- 为了实现第三个分层的优点 , 三层架构要求 , 层与层之间尽量的独立 , 不要胡乱传递某一层特有的对象 , 例如不要将web层特有的对象传递到 其它层 , 以为一旦这样做 ,这些某一层特有的对象就侵入到了其它层 , 一旦要替换这一层时 , 不可避免的跟着修改其它层 , 这种情况称之为层与层之间发生了耦合 。
四、三层架构解耦
- 层与层之间的耦合是有害的 , 应该尽量避免或消除 , 解决 这些耦合的过程称之为解耦 。 最终希望实现高内聚 、 低耦合的状态(提高模块内的利用率, 降低模块之间的依赖性) 。
解耦的实现:
- 不要胡乱传递某一层所特有的对象
- 但是再小心 , 层与层之间也必须要存在着某种关系才能成为一个整体的应用 , 这些耦合是无法避免的 。 所以要把这些耦合管理起来 , 把这些耦合控制在可控的范围内 。
接口+配置文件+工厂设计模式实现层与层之间的解耦:
案例:
1. servlet中与要实现的用户业务逻辑未解耦之前:在Servlet中:Userservice us = new UserServiceImpl();//需要指定实例化具体的哪一个对象 , 产生了耦合(Uservice是接口)解耦之后:UserService us = BaseFactory.getFactory().getInstance(UserService.class);//并没有指定具体的对象 , 而是由工厂类从配置文件中读取配置具体的实现类 ,没有耦合2. 配置文件config.properties中的内容:UserService=com.tj.service.UserServiceImpl.java3. 工厂类实现: public class BaseFactory { private static BaseFactory base = new BaseFactory(); private static Properties prop = new Properties(); static{ try { String path = BaseFactory.class.getClassLoader().getResouce("config.properties").getPath(); prop.load(new FileInputStream(path)); } catch (Exception e) { e.printStackTrace(); } } private BaseFactory(){} public static BaseFactory getBase(){ return base; } public <T>T getInstance(Class<T> clz) throws InstantiationException, IllegalAccessException, ClassNotFoundException{ //读取配置文件中的属性 String name= prop.getProperty(clz.getSimpleName()); return (T) Class.forName(name).newInstance(); }}
阅读全文
0 0
- 大数据WEB阶段(十四)JavaEE开发模式
- 大数据WEB阶段(十五)JavaEE三大核心技术之过滤器
- 大数据WEB阶段(十六)JavaEE三大 核心技术之监听器Listener
- 大数据WEB阶段(三)CSS
- 大数据WEB阶段(四)JavaScript
- 大数据WEB阶段(五)jQuery
- 大数据WEB阶段(十九)Threadlocal
- 大数据WEB阶段总结
- 大数据新的阶段开发阶段
- 大数据WEB阶段 (六)MySql详解(一)
- 大数据WEB阶段(六)MySql详解(二)
- 大数据WEB阶段(一)XML文件的操作
- 大数据WEB阶段(九)Servlet+Request
- 大数据WEB阶段(十一)Ajax、URL编码
- 大数据WEB阶段(十八)数据库事务
- 大数据WEB阶段(二十)更新丢失
- 大数据WEB阶段Spring框架(四)Spring-MVC
- 软件开发全套视频教程汇总(javaSE,javaEE,linux,android开发,C# ,web前端,大数据云计算,数据挖掘,web前端,php开发,UI设计,C++开发,3D视频)
- js闭包浅记
- TCP层性能优化:nagles算法与延迟ack共同工作导致的一次性能下降
- C语言中的变量的分类
- Pygame 中与鼠标工作相关的模块。
- 求int型正整数在内存中存储时1的个数
- 大数据WEB阶段(十四)JavaEE开发模式
- js闭包和for循环
- KNN算法
- CCF YOCSEF 大数据+人工智能创新前沿报告会(二)
- jupeter notebook keyboard shortcuts
- 快速傅里叶变换(FFT)
- 1.变量、事件、函数、style属性操作
- 安卓 沉浸式布局
- 智能指针