MVC设计流程(粗略)实践篇

以下只是简要说明几个核心类数据库连接控制器ConnectionManager 
public class ConnectionManager {

    private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>();

    // 取得当前本地线程局部变量的副本--- 获取连接
    public static Connection getConnection() {
        Connection conn = connectionHolder.get();
        if (conn == null) {
            conn = new DBUtil().getConn();
            connectionHolder.set(conn);
        }
        return conn;
    }

    /**
     * 关闭数据库连接
     */
    public static void closeConnection() {
        Connection conn = connectionHolder.get();
        if (conn != null) {
            try {
                conn.close();
                connectionHolder.remove();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 手工开启事务
     *
     * @param conn
     */
    public static void beginTransaction(Connection conn) {
        try {
            if (conn != null) {
                if (conn.getAutoCommit()) {
                    conn.setAutoCommit(false);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置事务的提交
     *
     * @param conn
     */
    public static void commitTransaction(Connection conn) {
        try {
            if (conn != null) {
                if (!conn.getAutoCommit()) {
                    conn.commit();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置事务的回滚
     *
     * @param conn
     */
    public static void rollbackTransaction(Connection conn) {
        try {
            if (conn != null) {
                if (!conn.getAutoCommit()) {
                    conn.rollback();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 恢复原始的事务提交
     *
     * @param conn
     */
    public static void recoverTransaction(Connection conn) {
        try {
            if (conn != null) {
                if (conn.getAutoCommit()) {
                    conn.setAutoCommit(false);
                } else {
                    conn.setAutoCommit(true);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
数据访问层抽象类:AbstractDAO 
public abstract class AbstractDAO {

    protected Connection conn = null;
    protected PreparedStatement pstmt = null;

    public AbstractDAO(){
        this.conn = ConnectionManager.getConnection();
    }

}

数据访问层工厂: DAOFactory

public class DAOFactory {

    public static IMemberDAO getIMemberDAOInstance() throws Exception {
        String baseName = ResourceUtil.getResourceBundle("Database", "db.name");
        String className = ResourceUtil.getResourceBundle(baseName,
                "member.class");
        return (IMemberDAO) Class.forName(className).newInstance();
    }

业务层代理类:ServiceProxy

public class ServiceProxy implements InvocationHandler, Serializable {

    private Object obj; // 真实主题

    public Object bind(Object obj) {
        this.obj = obj; // 实现的MemberServiceImpl
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
                .getClass().getInterfaces(), this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        Object value = null;
        // 绑定对象的时候进行数据库连接的初始化验证
        if (method.getName().contains("login")
                || method.getName().contains("add")
                || method.getName().contains("edit")
                || method.getName().contains("rm")) { // 如果现在是更新操作
            Connection conn = ConnectionManager.getConnection();
            try {
                ConnectionManager.beginTransaction(conn);
                value = method.invoke(this.obj, args);
                ConnectionManager.commitTransaction(conn);
            } catch (Exception e) {
                ConnectionManager.rollbackTransaction(conn);
            } finally {
                ConnectionManager.recoverTransaction(conn);
                ConnectionManager.closeConnection();
            }
        } else {
            try {
                value = method.invoke(this.obj, args);
             }catch (Exception e) {
                throw e;
            } finally {
                ConnectionManager.closeConnection();
            }
        }
        return value;
    }

}

业务层工厂类:ServiceFactory

public class ServiceFactory {

    public static IMemberService getIMemberServiceInstance() {
        return (IMemberService) new ServiceProxy()
                .bind(new MemberServiceImpl());
    }
}
时间: 2024-10-12 18:26:33

MVC设计流程(粗略)实践篇的相关文章

ASP.NET MVC的流程讲解

开始想这个标题的时候,很是忧郁到底叫什么标题会比较好哪,最后还是确定为讲解,虽然略显初级,但是很多概念,想通了还是比较有价值的.废话略过,开始! 1.MVC的基本开发流程   2.webform和MVC的选择   3.MVC的内部过程 1.MVC的开发流程 MVC的出现时微软在2009年左右开始提出的网站开发的新的发展方向,这个方面的开发官方解释是可以比较好的实现三层分离,而且分离之后,可以实现复用等相关好处,通常人们列举的例子是ui方面可以同时支持HTML网络或者WAP网络.但是其实个人的理解

安卓MVC设计思想(转载)

觉得这个作者理解的很不错,转载过来. 转载地址:http://www.2cto.com/kf/201506/405766.html 框架模式 MVC 在Android中的使用 2015-06-08      0个评论    来源:废墟的树的专栏   收藏    我要投稿 算来学习Android开发已有2年的历史了,在这2年的学习当中,基本掌握了Android的基础知识.越到后面的学习越感觉困难,一来是自认为android没啥可学的了(自认为的,其实还有很多知识科学),二来网络上的很多框架已经帮我

讨论Android开发中的MVC设计思想

最近闲着没事,总是想想做点什么.在时间空余之时给大家说说MVC设计思想在Android开发中的运用吧! MVC设计思想在Android开发中一直都是一套比较好的设计思想.很多APP的设计都是使用这套方案完成架构设计的. 谈到MVC我想分为以下几个点分点突进. 1.什么是MVC框架. 2.MVC如何工作 3.MVC的缺点 4.Android之MVC设计模式. 一.什么是MVC框架. MVC英文即Model-View-Controller,即把一个应用的输入.处理.输出流程按照Model.View.

Spring MVC 设计概述

MVC设计的根本原因在于解耦各个模块 Spring MVC的架构 对于持久层而言,随着软件发展,迁移数据库的可能性很小,所以在大部分情况下都用不到Hibernate的HQL来满足移植数据库的要求.与此同时,性能对互联网更为重要,不可优化SQL.不够灵活成了Hibernate难以治愈的伤痛,这样MyBatis就崛起了.无论是Hibernate还是MyBatis都没处理好数据库事务的编程,同时随着各种NoSQL的强势崛起,使得Java Web应用不仅能够在数据库获取数据,也可以从NoSQL中获取数据

数据库设计流程

数据库设计流程  目前数据库设计一般分为6个阶段, 即需求分析阶段,概念结构设计阶段,逻辑结构设计阶段,物理结构设计阶段,实施阶段,运行与维护阶段. (1) 需求分析阶段 需求分析阶段的主要任务是指通过充分调查现实世界要处理的对象, 详细了解计算机系统的工作情况, 明确用户的各种需求, 然后确定系统的各项功能.数据库系统不仅要按照当前的应用要求来设计, 而且必须充分考虑今后可能的扩充和改变. (2) 概念结构设计阶段 概念结构设计阶段的主要任务是将需求分析阶段所得到的用户需求抽象为概念模型, 而

产品新人必知的设计流程规范详解

大部分产品经理都存在一个非常严重的问题,从产品构思阶段开始,就上手做产品页面原型,忽略了中间太多的关于产品架构,功能模块设计,产品规则定义这些非常重要的工作.结果就是出来的页面原型逻辑不自洽,或者忽视了太多产品关键细节.使得研发拿到原型以后做不下去,不得不后期各种修补和返工,制造了产品经理和研发之间的矛盾. 当然我们的产品经理团队也普遍存在这个问题,为此,打算在公司内部给我们的产品经理培训一下.以下是完整的产品设计流程规范: 1. 产品构思 . 目标:搜集需求,整理产品思路,逐渐形成和完善产品构

完整的交互设计流程应该是怎样的?

我们常见的交互流程是这样的: 一.定性研究(Qualitative Research):针对可能使用你的产品的人,可以是问卷.访谈…… 二.确定人物角色(Persona):即产品的典型用户,可以有一种或几种.例如可以有一个人物角色叫CEO. 三.写问题脚本(Problem Scenario):罗列人物角色在使用产品时可能遇到的问题,可以整理成一个故事便于别人理解 四.写动作脚本(Action Scenario):像写故事一样,写人物角色在使用你设计好的产品时,发生的细节.注意,这个时候你的交互方

ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人>: 开篇:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init.加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作,最后将与模板结合生成的HTML返回给了浏览器.那么,在ASP.NET MVC模式下,一个页面的生命周期又经历了哪些步凑呢?别急,本篇漫漫

MVC 设计思想

MVC 不是一种设计模式,而是一种设计思想 设计模式:是一种固定方法.不灵活,有特定的使用场景 设计思想:是一种思想,比较灵活,有多重设计模式组合实现.  MVC设计思想: V(view):主要功能展示数据,只要有数据即可,不关心数据的来源 M(model):主要功能提供数据(主要用来提供数据并不关心数据要谁显示). C(Controller):主要功能:协调V与M.作为V与M沟通的桥梁(中介).(controller负责给M要数据,然后控制数据让哪个View来显示) Model类 : 存储数据