自学内容网 自学内容网

【系统架构设计师】十九、层次式架构设计理论与实践②

目录

四、数据访问层设计

4.1 数据访问模式

4.2 工厂模式在数据库访问层的应用

4.3  JavaBean中使用 JDBC 方式进行事务处理

4.4 连接对象管理设计

五、数据架构规划与设计

相关推荐


四、数据访问层设计

4.1 数据访问模式

        数据访问模式有 5 种,分别是:在线访问、Data Access Object、Data Transfer Object、离线数据模式、对象/关系映射(Object/Relation Mapping)

        (1)在线访问:最常用的方式。访问占用一个数据库连接,读取数据,每个数据库操作都会通过这个连接不断地与后台的数据源进行交互。如下左侧图。

        (2)Data Access Object:DAO 是标准 J2EE 设计模式,这种方式将底层数据访问操作与高层业务逻辑分离开。一个典型的 DAO 实现通常会有一个 DAO 工厂类、一个 DAO 接口、一个实现了DAO 接口的具体类、数据传输对象。如下右侧图。

        (3)Data Transfer Object:DTO 属于 EJB 设计模式之一。DTO 是一组对象或容器,需要跨越不同的进程或是网络的边界来传输数据。

        (4)离线数据模式:离线数据模式是以数据为中心,数据从数据源获取之后,将按照某种预定义的结构存放在系统中,成为应用的中心。这种方式对数据的各种操作独立于各种与后台数据源之间的连接或是事务。

        (5)对象/关系映射:这种方式利用工具或平台能够帮助将应用程序中的数据转换成关系型数据库中的记录;或是将关系数据库中的记录转换成应用程序中代码便于操作的对象。

4.2 工厂模式在数据库访问层的应用

        首先定义一个操纵数据库的接口DataAccess,然后根据数据库的不同,由类工厂决定实例化哪个类。

public interface DataAccess {
    DatabaseType DatabaseType{get;}     //数据库类型
    IDbConnection DbConnection{get;}    //得到数据库连接
    void Open();                        //打开数库连接
    void Close();                       //关闭数据库连接
    IDbTransaction BeginTransaction();  //开始一个事务
    int ExecuteNonQuery(string commandText);//执行 Sql语句
    DataSet ExecuteDataset(string commandText);//执行 Sql,返回DataSet
}

        因为DataAccess的具体实现类有一些共同的方法,所以先从DataAccess实现一个抽象的
AbstractDataAccess类,包含一些公用方法。然后,分别为SQL Server、Oracle和 OleDb 数据库
编写三个数据访问的具体实现类。

public sealed class MSSqlDataAccess :AbstractDataAccess{
    …//具体实现代码
}
public class oleDbDataAccess :AbstractDataAccess{
    …//具体实现代码
}
public class oracleDataAccess :AbstractDataAccess{
    …//具体实现代码
}

        现在已经完成了所要的功能,下面需要创建一个Factory类,来实现自动数据库切换的管理。这个类很简单,主要的功能就是根据数据库类型,返回适当的数据库操纵类。

public sealed class DataAccessFactory {
    private DataAccessFactory() {}
    private static PersistenceProperty defaultPersistenceProperty;
    public static PersistenceProperty DefaultPersistenceProperty
    {
        get {return defaultPersistenceProperty;}
        set {defaultPersistenceProperty = value;}
    }

    public static DataAccess CreateDataAccess(PersistenceProperty pp) {
        DataAccess dataAccess;
        switch (pp.DatabaseType) {
            case (DatabaseType.MSSQLServer):
                dataAccess = new MSSqlDataAccess(pp.ConnectionString);
                break;
            case (DatabaseType.Oracle):
                dataAccess = new OracleDataAccess(pp.ConnectionString);
                break;
            case (DatabaseType.OleDBSupported):
                dataAccess = new OleDbDataAccess(pp.ConnectionString);
                break;
        }
        return dataAccess;
    }

    public static DataAccess CreateDataAccess() {
        return CreateDataAccess(defaultPersistenceProperty);
    }
}

4.3  JavaBean中使用 JDBC 方式进行事务处理

        事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。

        在JDBC 中怎样将多个SQL 语句组合成一个事务呢?在JDBC 中,打开一个连接对象Connection 时,默认是 auto-commit 模式,每个SQL 语句都被当作一个事务,即每次执行一个语句,都会自动地得到事务确认。为了能将多个 SQL 语句组合成一个事务,要将 auto-commit 模式屏蔽掉。在 auto-commit 模式屏蔽掉之后,如果不调用 commit() 方法, SQL 语句不会得到事务确认。在最近一次 commit() 方法调用之后的所有SQL 会在方法 commit() 调用时得到确认。

4.4 连接对象管理设计

        连接对象管理设计:通过资源池解决资源频繁分配、释放所造成的问题。

        建立连接池的第一步,就是要建立一个静态的连接池。所谓静态,是指池中的连接是在系统初始化时就分配好的,并且不能够随意关闭。Java 中给我们提供了很多容器类,可以方便地用来构建连接池,如Vector、Stack 等。在系统初始化时,根据配置创建连接并放置在连接池中,以后所使用的连接都是从该连接池中获取的,这样就可以避免连接随意建立、关闭造成的开销。

        有了这个连接池,下面就可以提供一套自定义的分配、释放策略。当客户请求数据库连接时,首先看连接池中是否有未分配出去的连接。如果存在空闲连接则把连接分配给客户,并标记该连接为己分配。若连接池中没有空闲连接,就在已经分配出去的连接中,寻找一个合适的连接给客户,此时该连接在多个客户间复用。

        当客户释放数据库连接时,可以根据该连接是否被复用,进行不同的处理。如果连接没有使用者,就放入到连接池中,而不是被关闭。

五、数据架构规划与设计

        数据库设计与XML 设计融合:XML 正在成为Internet上数据描述和交换的标准,并且将来会代替 HTML 而成为 Web 上保存数据的主要格式。

        XML 文档分为两类:

                ①是以数据为中心的文档,这种文档在结构上是规则的,在内容上是同构的,具有较少的混合内容和嵌套层次,人们只关心文档中的数据而并不关心数据元素的存放顺序,这种文档简称为数据文档,它常用来存储和传输 Web 数据。
                ②是以文档为中心的文档,这种文档的结构不规则,内容比较零散,具有较多的混合内容,并且元素之间的顺序是有关的,这种文档常用来在网页上发布描述性信息、产品性能介绍和 E-mail信息等。

        XML 文档的存储方式有两种:基于文件的存储方式和数据库存储方式

                ①基于文件的存储方式。基于文件的存储方式是指将XML 文档按其原始文本形式存储,主要存储技术包括操作系统文件库、通用文档管理系统和传统数据库的列(作为二进制大对象 BLOB 或字符大对象 CLOB)。 这种存储方式需维护某种类型的附加索引,以建立文件之间的层次结构。基于文件的存储方式的特点:无法获取 XML 文档中的结构化数据;通过附加索引可以定位具有某些关键字的 XML 文档,一旦关键字不确定,将很难定位;查询时,只能以原始文档的形式返回,即不能获取文档内部信息;文件管理存在容量大、管理难的缺点。
                ②数据库存储方式。数据库在数据管理方面具有管理方便、存储占用空间小、检索速度快、修改效率高和安全性好等优点。一种比较自然的想法是采用数据库对 XML 文档进行存取和操作,这样可以利用相对成熟的数据库技术处理 XML 文档内部的数据。数据库存储方式的特点:能够管理结构化和半结构化数据;具有管理和控制整个文档集合本身的能力;可以对文档内部的数据进行操作;具有数据库技术的特性,如多用户、并发控制和一致性约束等;管理方便,易于操作。

相关推荐

【系统架构设计师】十九、层次式架构设计理论与实践①-CSDN博客文章浏览阅读594次,点赞24次,收藏5次。层次式体系结构设计是一种常见的架构设计方法,也称为 N 层架构设计,它将系统组成为一个层次结构,每一层为上层服务,并作为下层客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。层次式体系结构的每一层最多只影响两层,同时只要给相邻层提供相同的接口,也允许每层用不同的方法实现,这种方式也为软件重用提供了强大的支持。大部分的应用会分成表现层(或称为展示层)、中间层(或称为业务层)、访问层(或称为持久层)和数据层。https://shuaici.blog.csdn.net/article/details/140684710【系统架构设计师】十八、信息系统架构设计理论与实践①-CSDN博客文章浏览阅读728次,点赞40次,收藏20次。信息系统架构(ISA)是指对某一特定内容里的信息进行统筹、规划、设计、安排等一系列有机处理的活动。目前关于信息系统架构较为权威的定义有:(1)信息系统架构是系统的结构,由软件元素、元素外部可见属性和元素间关系组成。(2)信息系统架构是软件系统结构、行为和属性的高级抽象,由系统元素描述、元素间相互作用、元素集成模式及模式约束组成。(3)信息系统架构是系统的基础组织,体现为构件、构件间关系、构件和环境间关系、构件设计和演进的原则。https://shuaici.blog.csdn.net/article/details/140641460【系统架构设计师】九、软件工程(软件开发生命周期|McCabe度量法|系统转换|系统维护|净室软件工程|基于构件的软件工程)-CSDN博客文章浏览阅读1.3k次,点赞14次,收藏11次。九、软件开发生命周期和工具;十、McCabe度量法;十一、系统转换(11.1遗留系统、11.2系统转换、11.3系统维护);十二、净室软件工程;十三、基于构件的软件工程(13.1构件特征、13.2构件模型要素、13.3CBSE过程、13.4构件组装)。https://shuaici.blog.csdn.net/article/details/140321547【系统架构设计师】一、计算机系统基础知识(指令系统|存储系统|输入输出技术|总线结构)_龙架构中st.w指令内存有效地址是按照哪种寻址方式计算获得的-CSDN博客文章浏览阅读1.3k次,点赞20次,收藏32次。一、指令系统1.1 计算机指令,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。在计算机中,操作要求和操作数地址都由二进制数码表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器中。取指令-一分析指令--执行指令首先将程序计数器PC中的指令地址取出,送入地址总线,CPU依据指令地址去内存中取出指令内容存入指令寄存器IR;而后由指令译码器进行分析,分析指令操作码;最后执行指令,取出指令执行所需的源操作数。1.2 指令寻址方式。_龙架构中st.w指令内存有效地址是按照哪种寻址方式计算获得的https://shuaici.blog.csdn.net/article/details/139685161


原文地址:https://blog.csdn.net/g984160547/article/details/140689664

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!