系统架构设计师教程 第13章 13.4 数据访问层设计 笔记

news2024/10/5 13:40:19

13.4 数据访问层设计 ★★★☆☆

13.4.1 5种数据访问模式

1.在线访问

最基本的数据访问模式,也是在实际开发过程中最常采用的。

会占用一个数据库连接,读取数据,每个数据库操作都会通过这个连接不断地与后台的数据源进行交互。

2. DataAccess Object

DAO模式是标准 J2EE 设计模式之一,开发人员常常用这种模式将底层数据访问操作与高层业务逻辑分离开。

一个典型的 DAO 实现通常有以下组件。

(1)一个DAO工厂类。

(2) 一 个DAO接口。

(3)一个实现了DAO接口的具体类。

(4)数据传输对象。

这当中具体的 DAO类包含访问特定数据源的数据的逻辑。

3.Data Transfer Object

Data Transfer Object是经典EJB 设计模式之一。DTO是一组对象或是数据的容器,它需要跨不同的进程或是网络的边界来传输数据。

在具体设计这类对象 (DTO) 时,通常有两种选择

(1)使用编程语言内置的集合对象,通常只需要一个类,就可以在整个应用程序中实现任何数据的传输;几乎所有的编程语言都内置了集合类型,不需要再另外编写实现代码。

(2)通过创建自定义类来实现DTO 对象,通过定义显示的get 或是 set方法来访问数据。

两种方法优点结合:

代码生成技术,可以生成脱离现有元数据(如可扩展标记语言XML架构)的自定义DTO类的源代码;

提供更强大的集合,将关系和数据类型信息与原始数据存储在一起,如SDO、DataSet

4.离线数据模式

离线数据模式是以数据为中心,数据从数据源获取之后,将按照某种预定义的结构存放在系统中,

5.对象/关系映射 (Object/Relation Mapping,O/R Mapping)

对象/关系映射能够帮助将应用程序中的数据转换成关系型数据库中的记录;或是将关系数据库中的记录转换成应用程序中代码便于操作的对象。

13.4.2 工厂模式在数据访问层应用

工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类 的实例化延迟到其子类。

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

13.4.3 ORM、Hibernate与CMP2.0设计思想

ORM(Object-Relation Mapping) 在关系型数据库和对象之间作一个映射,使用 ORM可以大大降低学习和开发成本。

Hibernate是一个开放源代码的对象关系映射框架,它对 JDBC 进行了轻量级的对象封装,使Java程序员可以使用对象编程思维来操纵数据库。它不仅提供了从Java类到数据表之间的映射,还提供了数据查询和恢复机制。

13.4.4 灵活运用XML Schema

XML Schema用来描述XML文档合法结构、内容和限制。可以用来评估一个格式良好元素和属性信息的有效性。XMLSchema是Schema组件的集合,这些组件分为三组:基本组件、组件和帮助组件。其中

基本组件包括简单类型定义、复杂类型定义、属性声明和元素声明;

组件包括属性组、完整性约束定义、模型组和符号声明;

帮助组件包括注释、模型组、小品词、通配符和属性使用。

Schema组件详细说明了抽象数据模型的每个组件的严格语义,每个组件在 XML中的表示,一个XMLSchema文档类型的DTD和XMLSchema引用。

XML Schema提供了创建XML 文档必要的框架,详细说明了一个XML文档的不同元素和属性的有效结构、限制和数据类型。XML Schema规范由如下三部分组成。

(1)XML Schema Part0:Primer。一个非标准化的文档,提供了XML Schema 的一个简单可读的描述,目的是快速地理解如何利用 XML Schema语言创建一个Schema (框架)。

(2)XML Schema Partl:Structures。详细说明了 XML Schema定义语言,为描述XML1.0 文档的结构和内容限制提供了便利。

(3)XML Schema Part2:Datatypes。定义了可用于 XMLSchema和其他XM L规 中的定义数据类型的方法,提供了丰富的数据类型,实现了继承和复用,与命名空间紧密联系,易于使用。

XMLSchema规范提供了丰富的数据类型。其中不仅包括一些内嵌的数据类型,如string、integer、Boolean、time和date等,还提供了定义新类型的能力,如complexType和simpleType。开发者可以利用内嵌的数据类型和用户定义的数据类型,有效地定义和限制XML文档的属性和元素值。

XML Schema支持继承。可以利用从已经存在的Schema 中获得某些类型而 构造新的 Schema, 也可以在不需要时使获得的类型无效。同时, XML Schema能将一个 Schema 分成单独的组件,在写Schema 时,就可以正确地引用已经定义的组件。继承性使得软件复用更加有效,极大地提高了软件开发和维护的效率。

13.4.5 事务处理设计

事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(Atomicity)、一致性(Consistency)、隔离性 (Isolation) 和持久性(Durability)的缩写。

原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。

一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。

隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。

持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。

一般情况下, J2EE 应用服务器支持JDBC 事务、 JTA(Java Transaction API) 事务和容器管 理事务。一般情况下,最好不要在程序中同时使用上述三种事务类型,例如在JTA 事务中嵌套 JDBC事务。另外,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微服务】服务注册与发现、分布式配置管理 - Consul(day5)

概述 作用 Consul的两大作用就是服务发现和注册与分布式配置管理。 服务发现在介绍Eureka组件的时候已经进行过详细概述,大概就是将硬编码到服务中的IP地址和端口号进行解耦,从而实现动态扩缩容、容错处理、服务管理等功能,通过服务注册和…

MAC备忘录空白解决方案

打开icloud->备忘录 取消勾选同步此MAC后再次勾选,然后点击完成即可。

<<迷雾>> 第7章 会变魔术的触发器(3)--R-S 触发器 示例电路

用来验证或非门反馈功能的完整电路 info::操作说明 如演示出现异常, 可点右侧面板的重置按钮重置 此处 R 和 S 都使用的是按钮开关 点击 R 可让 Q 熄灭 点击 S 可让 Q 亮起 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjd…

针对线上消息积压的排查思路以及解决方案

一、背景 我们在日常工作中,经常会碰到线上告警,消息队列消息积压了,试想如果对消息的消费速率有要求的场景,消息积压一定会或多或少对自己本身的业务场景有影响,这里就针对消息积压的场景,谈谈具体的排查…

过滤器Filter【详解】

过滤器Filter 1、 现有问题 在以往的Servlet中,有冗余的代码,多个Servlet都有重复的代码 比如编码格式设置 登录信息认证 2、 概念 过滤器(Filter)是处于客户端与服务器目标资源之间的一道过滤技术。 过滤器 3、 过滤器作用 执…

Python办公自动化教程(006):Word添加标题

2.3 word标题 介绍: 在 python-docx 中,您可以使用 add_heading() 方法为文档添加标题。此方法允许您指定标题的文本和级别(例如,一级标题、二级标题等)。标题级别的范围是从 0 到 9,其中 0 表示文档的主标…

深度解析:从浏览器输入链接到页面展现的奇幻历程

〇、前言 当我们在浏览器中输入一个网址,例如:example.com,按下回车键后,会发生什么呢? 主要会发生以下这些过程:域名解析、建立HTTP连接、发送HTTP请求、数据传输、渲染网页、断开HTTP连接。 一、域名解…

类型转换【C++提升】(隐式转换、显式转换、自定义转换、转换构造函数、转换运算符重载......你想知道的全都有)

更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: C系列语法知识_Stark、的博客-CSDN博客 座右铭:梦想是一盏明灯,照亮我们前行的路,无论风雨多大,我们都要坚持不懈。 一…

【srm系统】供应商管理,招投标管理,电子采购系统,询价管理

前言: 随着互联网和数字技术的不断发展,企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式,能够提高采购效率、降低采购成本、优化供应商合作效率,已成为企业实现效益提升的关键手段。系统获取在文末…

[含文档+PPT+源码等]精品基于Python实现的美术馆网站的设计与实现

基于Python实现的美术馆网站,其设计与实现背景主要源于以下几个方面的需求和发展趋势: 一、文化艺术领域的发展需求 随着文化娱乐活动的日益丰富,美术馆作为展示艺术作品、传播文化的重要场所,其管理和服务模式的创新对于提升公…

LabVIEW提高开发效率技巧----使用动态事件

在LabVIEW开发过程中,用户交互行为可能是多样且不可预知的。为应对这些变化,使用动态事件是一种有效的策略。本文将从多个角度详细介绍动态事件的概念及其在LabVIEW开发中的应用技巧,并结合实际案例,说明如何通过动态事件提高程序…

【售后资料】软件售后服务方案(word原件)

软件售后服务方案的售后服务范围广泛,涵盖了多个方面,以确保客户在使用软件过程中得到全面、及时的支持。具体来说,这些服务范围通常包括以下几个核心内容: 技术支持服务维护与更新服务培训与教育服务定制化服务数据管理与服务客户…

如何获取网页内嵌入的视频?

如何获取网页内嵌入的视频? 有时插件无法识别的视频资源,可以通过手动使用浏览器的开发者工具来抓取。你可以按照以下步骤操作: 步骤: 打开网页并按 F12:在视频页面按下 F12 或右键点击网页并选择“检查”或“Inspe…

Spring Boot实现的大学生就业市场解决方案

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…

【案例】距离限制模型透明

开发平台:Unity 2023 开发工具:Unity ShaderGraph   一、效果展示 二、路线图 三、案例分析 核心思路:计算算式:透明值 实际距离 / 最大距离 (实际距离 ≤ 最大距离)   3.1 说明 | 改变 Alpha 值 在 …

简易投影仪的制作

今天不做开发类的文章,来给大家整个活哈哈哈哈哈。由于前几天室友说看小屏幕的抖音太不舒服,比较累眼睛,所以我萌生出来一个制作投影仪的想法。于是查阅了资料最终完成以下的设计。 以下设计价格最高的是一部旧的可拆卸的智能手机 简易投影仪…

C++11新特性(基础)【2】

目录 1.范围for循环 2.智能指针 3.STL中一些变化 4.右值引用和移动语义 4.1 左值引用和右值引用 4.2 左值引用与右值引用比较 4.3 右值引用使用场景和意义 4.4 右值引用引用左值及其一些更深入的使用场景分析 4.5 完美转发 1.范围for循环 int main() {int array[10] { 1,2,3,4…

CSS | CSS中强大的margin负边距

css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果。很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的。本文非常基础,老鸟可以略过。 一、负边距…

【宽搜】3. leetcode 515 在每个树行中找最大值

1 题目描述 题目链接:在每个树行中找最大值 2 题目解析 根据题目描述,是找出每一行中的最大值,这毋庸置疑是使用宽度优先遍历了。我在这篇文章中讲解了宽度优先遍历的模板,如果没有看的同学可以先去看一下。 这道题和模板的不…

基于微信小程序的调查问卷管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…