MVC开发模式

C:控制层,
M:业务模型层,完成业务处理
        1.dao层:直接操作数据库
        2.service层:J调用dao层完成业务实现,负责管理所调用的dao层的事务管理
v:视图层将处理结果写入响应包            //jsp


        dao层:在实际业务中,往往需要多次数据库操作,这些操作的性质往往是相同的,dao层就是对这些访问的封装,避免重复开发
        dao层实现:
                1.Dao接口层:声明Dao接口
                                        命名规则:包         com.xxx.dao
                                                                       com.xxx.daoImpl
                                                           接口     表名Dao
                2.Dao实现层:声明Dao接口的实现类                         //早service实现层中:先获得Connection对象,再将其传入Dao层的方法中,这样方便所有Dao层进行统一事务管理
                                        命名规则:实现类   表名DaoImpl
                                        
        独立使用dao层的问题:封装的是数据库的操作,无法实现业务的复用
                                             无法将参与同一个业务中的sql语句放入同一个事务中来管理   //因为每个调用sql的方法都会独自获取Connection,所以Connection对象通过参数传入方法

        service层:1.封装一个具体业务的实现方案,来提高业务实现复用性
                           2.负责将参与本次业务实现的dao层中的事务进行管理   //把Dao层封到同一个事务中
                        实现:1.service接口层:包          com.xxx.service
                                                                接口      表名Service        //本次业务只跟一张表关联
                                                                              业务名Service        //本次业务与多张表关联

                                2.service实现层:  包                  com.xxx.serviceImpl
                                                                实现类          表名ServiceImpl       //本次业务只跟一张表关联
                                                                                     业务名ServiceImpl    //本次业务与多张表关联     
                                                                //实现类私有属性设置为dao接口类型,把dao接口通过set方法传入,就可以正常在里面使用了            
                                                                 在实现类里的方法写业务,使用的时候就new出实现类对象,通过对象调用方法        

                
使用ThreadLocal共享数据 :java,lang.ThreadLocal       本地线程库(仓库)
        创建线程仓库:new ThreadLocal()
        用户的一次请求就是一个线程,该线程访问期间经过多个Java类:serviceImpl----DaoImpl
        在JVM中为每个工程创建一个ThreadLocal对象,类似于Map,由键值对构成(key是线程,value是共享数据)
        在serviceImpl向ThreadLocal添加数据,在DaoImpl里拿出该数据,拿完后删除ThreadLocal对象中当前线程的数据

MVC开发模式_第1张图片

接着出现的问题:serviceImpl层的方法中,需要开启事务,提交事务,回滚事务,关闭connection等操作,不能专注于业务逻辑
解决方法:采用代理设计模式----统一由代理去把业务中逻辑之前和之后的代码去完成

mvc图 

MVC开发模式_第2张图片

 MVC开发模式_第3张图片

你可能感兴趣的:(mvc)