在前面简单描述了下服务层,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:项目开发小组成员网站数据访问层设计相关推荐

  1. Java job interview:项目开发小组组长网站页面设计

    网页设计(web design,又称为Web UI design,WUI design,WUI),是根据企业希望向浏览者传递的信息(包括产品.服务.理念.文化),进行网站功能策划,然后进行的页面设计美 ...

  2. Java job interview:项目架构研发京东大数据价值最大化的应用实践

    "大数据"的经典定义是可以归纳为4个V:海量的数据规模(volume).快速的数据流转和动态的数据体系(velocity).多样的数据类型(variety)和巨大的数据价值(val ...

  3. 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项目开 ...

  4. ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出...

    ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出 前言:首先给大家说声"对不起",因为自从打算写这系列的文章以来,得到大家很多的支持 ...

  5. ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发

    为什么80%的码农都做不了架构师?>>>    ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发          前言:本篇主要讲述数据访问层的开发, ...

  6. 100个vc小项目开发:二、一步一点设计音乐播放器 [I]

    100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...

  7. 项目架构开发:数据访问层之Cache

    数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...

  8. java数据访问层实例_java实际项目先写哪一层?java三层架构是什么?

    在写java实际项目的时候,我们都是要有思维逻辑的,哪一层先写哪一层后写,这些都要考虑清楚,那么接下来,我们就来给大家讲解一下这方面的内容. 这没有标准,一般是controller-service-d ...

  9. SpringBoot的Web开发入门案例9—数据访问

    SpringBoot的Web开发入门案例9-数据访问 创建一个springboot项目(打包方式为jar包): 勾选Spring Web选项,勾选JDBC API和MySQL Driver pom文件 ...

最新文章

  1. 《算法技术手册》一2.4.6 二次方的算法性能
  2. c++ map嵌套队列(队列嵌套结构体指针)ok
  3. Python学习笔记:常用第三方模块3
  4. QT的QGradient类的使用
  5. Linux 下用C语言连接 sqlite
  6. 【正则表达式】以字母或下划线开头,包含字母、数字、以及下划线
  7. windows 8.1 IE11 和 windows 10 Edge IE11 FlashPlayer 的安装与卸载
  8. 再推新机!小米A3正式发布 售价249欧元起
  9. ITIL4-foundation学习和考试心得
  10. java的编译路径在哪_如何知道我的java编译器的路径
  11. adb配置环境变量没有反应
  12. 用EasySysprep封装Win7系统
  13. PSP实机用虚拟机wifi网卡联机
  14. 杜甫写的有关风雨的古诗有哪些
  15. dnsmasq实现dns劫持
  16. 用matlab画双坐标图,怎么灵活改变坐标轴颜色,刻度,字体等
  17. 手机MTP模式连接电脑后文件夹显示不全 小米5s
  18. jwPlayer播放器基本使用
  19. 工作模板文档实践整理
  20. 单链表图解及模板总结

热门文章

  1. Linux查看实时网速的Shell
  2. 三角函数积分的换元法
  3. 计算复杂性第九章——难解性
  4. 消防工程师 第二篇 建筑防火 5.1 防火分区
  5. 面试官:SPA(单页应用)首屏加载速度慢怎么解决?
  6. prach频域位置_[转载]zz LTE PRACH时频资源及选择
  7. 【博客表情包】emoji和符号表情包
  8. css3 呼吸的莲花_Css实例制作“荷花盛开”代码演示
  9. 系统运维-20-2-openssh和openssl
  10. 【软考软件评测师】2015年下案例分析历年真题