大数据WEB阶段(十四)JavaEE开发模式

JavaEE开发模式

零、目录

  • 开发模式发展历程
  • MVC设计思想的出现
  • JavaEE经典三层架构
  • 经典三层架构解耦

一、开发模式发展历程

  1. Servlet是JavaEE开发中一种动态web资源开发技术 , 但是在做输出响应页面时及其繁琐 。
  2. JSP表面看上去像是Html , 但本质上是Servlet ,可以在其中插入java代码 , 所以也是一种动态web资源 , 他能更好的用于展示页面 , 也能处理一些业务逻辑 。
  3. JavaEE开发模式一: JSP+JavaBean
  4. JavaEE开发模式二: Servlet+JSP+JavaBean

二、MVC思想的出现

  1. 在开发模式的发展中 , 一些人总结出软件可以人为地分为Model 、 View 、 Controller三部分 , 也就是MVC设计模式的出现 。
  2. MVC设计模式要求这三部分尽量独立开来 , 互不干扰 , 这样使程序结构清晰 ,便于开发和维护

三、JavaEE的经典三层架构

  1. 开发者将MVC设计思想融入了JavaEE开发模式中 ,由此衍生出了JavaEE开发的经典三层架构 。 将JavaEE的开发过程分为web层 、 service层 、 dao层 三层。
  2. 分层的优势:
    1. 分层 的目的在于代码更具有优良的结构 , 便于开发和维护 。
    2. 便于层与层之间实现代码的复用 , 减少代码的冗余 。
    3. 在更改某一模块时可以不影响其他模块的使用 , 实现模块的复用 。
      1. 如:需要将底层的数据库换为Orcal时, 不需要 更改Web层和Service层 。
  3. 为了实现第三个分层的优点 , 三层架构要求 , 层与层之间尽量的独立 , 不要胡乱传递某一层特有的对象 , 例如不要将web层特有的对象传递到 其它层 , 以为一旦这样做 ,这些某一层特有的对象就侵入到了其它层 , 一旦要替换这一层时 , 不可避免的跟着修改其它层 , 这种情况称之为层与层之间发生了耦合 。

四、三层架构解耦

  1. 层与层之间的耦合是有害的 , 应该尽量避免或消除 , 解决 这些耦合的过程称之为解耦 。 最终希望实现高内聚 、 低耦合的状态(提高模块内的利用率, 降低模块之间的依赖性) 。
  2. 解耦的实现:

    1. 不要胡乱传递某一层所特有的对象
    2. 但是再小心 , 层与层之间也必须要存在着某种关系才能成为一个整体的应用 , 这些耦合是无法避免的 。 所以要把这些耦合管理起来 , 把这些耦合控制在可控的范围内 。
    3. 接口+配置文件+工厂设计模式实现层与层之间的解耦:

      1. 案例:

        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();
        
            }
        }
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值