Java job interview:项目开发小组成员网站数据访问层设计
在前面简单描述了下服务层,SOA面向服务架构,架构设计-业务逻辑层,以及一些面面向设计原则理解和软件架构设计箴言。这篇博客我们将继续进入我们的下一层:数据访问层。无论你用的是什么开发模式或者是业务模式,到最后最必须具有持久化机制,持久化到持久化介质,并能对数据进行读取和写入CRUD。这就是数据访问层。你可能是利用xml等文件格式磁盘存储,常用的关系数据库存储,或者NoSql(not only sql)的内存存储或文档存储等等存储介质。而这里我只关心关系数据库存储。
数据层需要提供的职责有:
CRUD服务。作为唯一可以与存储介质交互的中间层出现,负责业务对象的增加,修改,删除,加载。
查询服务。这不同于CRUD中的R(read),read倾向于的单个对象,元组。而这里的查询针对复杂查询,比如一个国内电商的客户为四川的订单。这里会涉及仓储层。所谓仓储模式指的是一个提供业务对象查询的类,他隐藏了数据查询的解析步骤,封装sql解析逻辑。
事务管理。这里所说的是业务事务,在一个应用系统中每次请求都会产生多次的多数据对象的新增,修改,删除操作。如果我们每次都依次代开数据库连接,准备数据包,操作数据库,关闭数据连接。这些将会给我们带来很多不必要的性能开销。数据库管理员经常会要求“尽量少的与数据库交互”,这也必须成为我们的开发原则。更好的操作是我们在内存中建立一个和数据仓库,维护变化的对象,在业务操作完成一次性提交到数据存储介质,提供业务事务。业务事务有个很好听的名字工作单元(UOW),在微软给我们提供的DataSet,orm框架都回必须存在业务事务。
并发处理。UOW应避免业务数据连接的多次提交打开而出现,但在内存离线操作,这就可能导致数据一致性问题。在多用户的环境,对数据并发处理需要制定一个策略。一般我们会采用乐观并发处理:用户可以任意的离线修改,在修改更新时候检查对象是否被修改,如果被修改者本次更新失败。简单的说就是防止丢失修改。防止丢失修改,我们可以采用where 加上一系列原值,或者加上修改时间戳或者版本号标记。同时还有许多其他的并发解决模式,但乐观并发锁用到更普遍。
数据上下文:整和所有职责。在数据访问层概念职责都会有一个共同的暴露给外部的接口。我们需要一个高层次的组件,来同一提供对数据存储介质的访问操作。,同一访问数据库CRUD,事务,并发服务的高层次类,叫做数据上下文(Context)。EF中的ObjectContext,NHibernate的session,linq to sql 的DataContext等等。
数据访问层的一些概念(这里不会是全部,仅一些个人觉得重要的概念):
1: 数据映射器:将内存中修改的对象提交至存储介质,则需要要映射逻辑来完成,数据映射器就是就是一个实现将某种类型的业务对象持久化的类(数据映射器模式定义如《P of EAA》)。
2:仓储层(Repository):在上面提到:所谓仓储模式指的是一个提供业务对象查询的类,他隐藏了数据查询的解析步骤,封装sql解析逻辑。在面向对象的世界里我们用对象进行查询,返回结果为对象集。这里的查询可能是从数据库,或者来至缓存,这取决你的策略,你仓储层的实现。
3:工作单元(UOW):Martin Fowler《P of EAA》 定义:工作单元记录在业务事务过程中对数据库有影响的所有变化。操作结束后,作为一种结果,工作单元了解所有需要对数据库做的改变。在上面第3点业务事务讲的差不多,这里不是累述。
4:标示映射(Identity Map):其作用在于:便于跟踪业务对象,调用者在一个业务事务中使用的是同一个实例,而不是每次执行产生一个新的对象。表示映射为一个散列表存储(散列具有快速定位O(1))。类似于缓存的实现方式,保证了在同一个业务事务数据上下文引用修改同一个业务对象。但绝不同于缓存。从持续时间来说,标示映射生命周期为业务事务内。实现上等同于数据上下文期。但比起缓存来说其周期太短,根本不能对性能有多大的改善。缓存更重要的命中率,而标示映射保证同一数据上下文采用修改同一个业务对象的引用。
5:乐观并发锁:在上面也曾提到,其保证离线操作数据的对数据一致性的冲突解决方法。首先乐观在于允许离线操作,容忍冲突,防止数据丢失修改,可利用原读取数据值得where条件或者时间戳,版本号解决。
6:延时加载:对象并不是一次性加载完成,而是按照需求多次加载数据,到用时加载。业务对象太多关联,数据量太多余庞大,而我们每次业务事务需要操作的对象都只会是部分,不需要太多的数据对象。同事业务对象中还存在循环引用,这样不适于对象整体的一次性加载。延时加载提供了优化,意图在“尽可能的少加载,并按需加载,只加载需要的数据部分”。
Java job interview:项目开发小组成员网站数据访问层设计相关推荐
- Java job interview:项目开发小组组长网站页面设计
网页设计(web design,又称为Web UI design,WUI design,WUI),是根据企业希望向浏览者传递的信息(包括产品.服务.理念.文化),进行网站功能策划,然后进行的页面设计美 ...
- Java job interview:项目架构研发京东大数据价值最大化的应用实践
"大数据"的经典定义是可以归纳为4个V:海量的数据规模(volume).快速的数据流转和动态的数据体系(velocity).多样的数据类型(variety)和巨大的数据价值(val ...
- java c s项目_tms java C/S项目开发,内容丰富,质量 谢谢下载使用! Develop 238万源代码下载- www.pudn.com...
文件名称: tms下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 900 KB 上传时间: 2013-03-28 下载次数: 3 详细说明:java C/S项目开 ...
- ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出...
ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出 前言:首先给大家说声"对不起",因为自从打算写这系列的文章以来,得到大家很多的支持 ...
- ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发
为什么80%的码农都做不了架构师?>>> ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发 前言:本篇主要讲述数据访问层的开发, ...
- 100个vc小项目开发:二、一步一点设计音乐播放器 [I]
100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...
- 项目架构开发:数据访问层之Cache
数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...
- java数据访问层实例_java实际项目先写哪一层?java三层架构是什么?
在写java实际项目的时候,我们都是要有思维逻辑的,哪一层先写哪一层后写,这些都要考虑清楚,那么接下来,我们就来给大家讲解一下这方面的内容. 这没有标准,一般是controller-service-d ...
- SpringBoot的Web开发入门案例9—数据访问
SpringBoot的Web开发入门案例9-数据访问 创建一个springboot项目(打包方式为jar包): 勾选Spring Web选项,勾选JDBC API和MySQL Driver pom文件 ...
最新文章
- 《算法技术手册》一2.4.6 二次方的算法性能
- c++ map嵌套队列(队列嵌套结构体指针)ok
- Python学习笔记:常用第三方模块3
- QT的QGradient类的使用
- Linux 下用C语言连接 sqlite
- 【正则表达式】以字母或下划线开头,包含字母、数字、以及下划线
- windows 8.1 IE11 和 windows 10 Edge IE11 FlashPlayer 的安装与卸载
- 再推新机!小米A3正式发布 售价249欧元起
- ITIL4-foundation学习和考试心得
- java的编译路径在哪_如何知道我的java编译器的路径
- adb配置环境变量没有反应
- 用EasySysprep封装Win7系统
- PSP实机用虚拟机wifi网卡联机
- 杜甫写的有关风雨的古诗有哪些
- dnsmasq实现dns劫持
- 用matlab画双坐标图,怎么灵活改变坐标轴颜色,刻度,字体等
- 手机MTP模式连接电脑后文件夹显示不全 小米5s
- jwPlayer播放器基本使用
- 工作模板文档实践整理
- 单链表图解及模板总结