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.java 3. 工厂类实现: 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(); } }