精华内容
下载资源
问答
  • 数据访问层的职责

    千次阅读 2018-06-05 15:33:18
    数据库独立性的含义是无论最终数据存储的介质是什么,数据访问层都要能够为系统的其他部分提供相同的服务,例如,创建,读取,更新,修改,事务性和查询等。若你的模型中包含一个名为Customer的对象,那么数据访问层...

     

        数据库的独立性

        数据库独立性的含义是无论最终数据存储的介质是什么,数据访问层都要能够为系统的其他部分提供相同的服务,例如,创建,读取,更新,修改,事务性和查询等。若你的模型中包含一个名为Customer的对象,那么数据访问层要能够将其存放在不同的存储介质中,例如,SQLServer或Oracle。数据访问层将对业务层隐藏此细节。

        那么我们如何实现数据库的独立性呢?通常来说,数据库的独立性需要使用一套通用的,跨数据库的应用程序接口。当业务层获取到当前数据访问层的引用之后,业务层以多态的形式,通过公开接口的方法与数据库进行通信。我们可以在配置文件中切换数据库。

        还有一种方法也可以实现数据库的独立性,就是使用ORM关系映射工具。他会提供一套公共的API,让你只需修改配置文件即可切换到不同的数据库。

     

        数据访问层的职责

        数据访问层对其使用者来说有4个职责。首先,数据访问层需要将数据持久化到物理存储中,并为外界提供CRUD操作。

        其次数据访问层还能处理接受所有数据相关请求,数据访问层必须满足事务性的需求。最后,数据访问层也要合理地处理并发问题。

        1.CRUD服务

        CRUD服务是一系列的方法,负责将对象保存至关系型数据表,或从关系型数据表中读取数据并加载至新创建的应用程领域模型的类型实例。

        应该为实现CRUD服务编写怎样的代码呢?对于对象模型的每个类型,我们都要为其创建一个映射类,并实现一个接口。该接口中给出了该类型上所有数据库的相关操作。映射类内部可以使用ADO.NET或Linq To SQL来具体的实现。

        2.查询服务

        在某些情况下,我们会需要处理很复杂的查询,而且也不是所有查询都是一样的。有时我们会提取出一些通用的查询,在业务层和服务层的多个位置使用。

        更好的做法是将所有的硬编码,在业务层被多次使用的查询定义在仓储类中。此外,再定义一个通用的查询对象,能够以编程的方式配置并在执行时生成所需要的SQL代码。

        该查询对象的主要目的是通过对象的各个属性和方法收集数据,然后为数据库动态生成所需要的SQL代码。

        查询条件属于查询对象模式的应用,根据该模式,查询对象将定义成类,并包含一系列查询条件的集合。查询条件是一个简单的类,包含一个属性名,一个值,一个逻辑操作符,用来表明属性名和值之间的关系。

        

     

        3.事务管理

        在一个设计良好的数据访问层中,应该有一种机制跟踪一个工作单元内对应用程序数据的所有修改,这样即可在稍后将这些修改一次性地持久化到数据库中保存。这个工作单元就是一个逻辑上的事务,它包括一系列的数据库调用。

        所以我们应该创建一个能够维护发生变化的领域对象列表的类。这个类同时也提供了事务的语义(开始,提交,回滚),配合数据库的物理事务将修改提交回数据库。

        4.处理并发

        所以我们应在一个多用户环境中,与数据库离线操作会导致数据完整性的问题。用户A加载了产品1234的一个拷贝并更新了其描述,因为该操作属于一个较长的事务,我们可以假设该修改并没有立即提交。而同时,假设B也加载了1234的另一个拷贝,并更新了产品图片的URL。若用户B立即提交了它的修改,那么当用户A提交产品修改时,系统又该如何应对呢?

        你获取会说“这没问题呀”,因为两个用户更新了不同的字段。不过若是两个用户修改了相同的字段又该如何呢?很有可能第一个用户对产品的修改就这样丢失了,这通常叫做“最后写入者获胜”

        乐观的并发处理意味着用户可以自由地尝试更新数据库中的任意记录,不过成功与否不能保证。若数据访问层发现即将要更新的记录已经被别人修改过,那么此次修改失败。

        5.整合所有职责:数据上下文

        简而言之,你需要一个更高层次的类,用来表示并引导与底层存储介质的交互工作。随后,数据访问层的使用者就可以用该高层次的类作为存储介质的统一操作位置。ORM都有此高层次的类。

        这个可以统一访问数据访问层及其CRUD,事务和并发服务的高层次类通常叫做数据上下文(DataContext)。

        

    以上内容来自《Microsoft .NET企业级应用架构设计》   

    展开全文
  • Asp.net mvc 数据访问层

    千次阅读 2016-04-14 16:19:06
    理解了一些概念,本节开始尝试创建属于自己的数据访问层,说道数据访问层那必须有数据库咯(数据集合也算,此处以数据库为例),没有数据库就没有数据访问层。 1、先创建属于自己的数据库  打开已经安装好的SQL ...

           理解了一些概念,本节开始尝试创建属于自己的数据访问层,说道数据访问层那必须有数据库咯(数据集合也算,此处以数据库为例),没有数据库就没有数据访问层。

    1、先创建属于自己的数据库

          打开已经安装好的SQL Server 2005数据库引擎,输入用户名和密码后连接并创建数据库“SchoolERPDB”:

      

    2、创建连接字符串(ConnectionString)

          和WInFrom一样连接数据库类似,打开项目中的Web.config文件,在<Configuration>标签内添加如下代码:

    <add name ="SchoolERPDAL" 
         connectionString="Data Source=(local);Initial Catalog=SchoolERPDB;Intergrated Security=True;" 
         providerName="System.Data.SqlClient"/>

    3、添加EF引用
          右击项目->管理Nuget包,选择Entity Framework并点击安装,我用的是VS2012,自带该功能,如果你版本低于2012 就需要安装。

         

    4、创建数据访问层
          在项目中新建一个“Data Access Layer”文件夹,并在该文件夹中新建SchoolERPDAL类,并在该类中添加引用using System.Data.Entity;该类继承DbContext.



    5、创建Teacher类的主键
    打开前几节的类,添加下面的引用using System.ComponentModel.DataAnnotations; 添加Teacher的属性,用Key关键字表示主键。

        public class Teacher
        {
            [Key]//作用是将Id设置为Teacher的主键
            public int TeacherId { get; set; }
            public string TeacherName { get; set; }
            public int TeacherAge { get; set; }
        }  

    6、定义映射关系
          在SchoolERPDAL类中添加引用     using Mvc_一.Models; 在该类中重写OnModelCreating 方法:

    //</Teacher>
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    modelBuilder.Entity<Teacher>().ToTable("TblTeacher");
    base.OnModelCreating(modelBuilder);
    } 
    目的是让程序运行时候自动生成表:TblTeacher

    7、在数据库中添加新的属性Teacher

    //new 属性 Teachers
    public DbSet<Teacher> Teachers { get; set; } 
    DbSet表示数据库中能够被查询的所有的Teacher


    8、更改以前写过的业务层代码,并从数据库中获取数据,打开TeacherBusinessLayer类,引入  using Mvc_一.Data_Access_Layer; 修改GetTeacher方法:

            public List<Teacher> GetTeacher()
            {
                SchoolERPDAL schoolDal = new SchoolERPDAL();
                return schoolDal.Teachers.ToList();
            }  

    9、运行测试后并打开刚才创建的数据库,查看其表



    10、在数据库表TblTeacher中自行插入一些数据,并运行测试:


    A | explian:
    1、DbSet数据集是数据库方面的概念,指的是可以在数据库中查询的实体的集合,当执行Linq查询时,DbSet对象能够将查询进行内部转换,并触发数据库。
    在该实例中,数据集是Teachers,是所有Teacher的实体的集合。当每次需要访问Teacher时,会获取“TblTeacher”的所有记录,并转换为Teahcer对象,返回Teacher对象集。
    2、在该实例中ConnectionString(连接字符串)的名称和数据访问层的类名是相同的,都是SchoolERPDAL,因此会自动映射,开发者不需要进行手动映射,方便快捷。


    转载请标明出处 http://blog.csdn.net/jasonhds/ 版权所有,翻版必究~谢谢合作!

    展开全文
  • 很多地方如百度百科神马的都说数据访问层又称持久层,这两个真的等同吗?
  • 分布式数据访问层(DAL)

    千次阅读 2017-02-11 00:46:21
    概述分布式(Distributed)数据访问层(Data Access Layer),简称DAL,是利用MySQL Proxy、Memcached、集群等技术优点而构建的一个架构系统。主要目的是为了解决在高并发、大数据流操作遇到的和数据访问有关的诸多问题...

    概述

    分布式(Distributed)数据访问层(Data Access Layer),简称DAL,是利用MySQL Proxy、Memcached、集群等技术优点而构建的一个架构系统。主要目的是为了解决在高并发、大数据流操作遇到的和数据访问有关的诸多问题,例如怎么进行切库分表,怎样能更好地防止服务单点故障等等。

    分布式数据访问层是如何诞生的?

    是由手机之家一位资深的开发者和架构师许超前最先提出的。(和我名字很像似呀,^^^^)
    (以下内容引用自网络)

    2007年,手机之家的用户已经接近1000万、PV也到了500万以上,正处于中小型网站向大型网站的过渡时期。那时候,我们明显感觉到我们在技术上已经遇上了瓶颈,一个是系统负载过高,经常要担心我们的数据库是不是又挂了,进而造成整个系统的瘫痪。第二个是5年积累下来的代码也已经非常难以维护,因为分层模糊,结果到处充满着数据库访问逻辑、到处充满着缓存读写逻辑,再加上表的设计不合理,造成无法简单地进行水平伸缩。总之我们的系统已经到了不得不进行改造的地步了。
    后来,老高(手机之家创始人高春辉)组了一个研发团队,旨在从根本上解决上述提到的问题。在此后一年的时间里,我们走了很多弯路,经历了很多痛苦,不过,也正是在这段时间里产生了DAL的雏形,经过若干次改进变成了后来的DAL1.0。DAL的产生完全是形势使然。 DAL1.0上线后数据库的QPS明显下降从几千降到几百。事实证明,我们找到了一条行得通的路子。所以才有DAL的后续版本的开发,才有今天的DAL2.x版本的产生……

    分布式数据库访问层的特点

    1.可伸缩。

    这里是指水平可伸缩。事实上,这点更应该是整个系统要考虑的目标了,而非DAL,DAL要考虑的是怎么更好地支持。举例说,我们可以一个库一个服务,甚至可以是一个表一个服务,库、表拆分后,DAL应能路由查询、合并结果,而不是让应用程序去操心这些事。

    2.高可用性。

    (1) .我们认为出错失败是很正常的,一台机器倒下了,其它机器应继续保持系统正常运作。容错是很重要的一个要求。
    (2) 系统规模大了以后,很容易出现“异构”的情况,如原有模块MySQL表引擎是MyISAM的,是不支持事务的,而新上的模块又采用了InnoDB表引擎,在这种情况下,DAL应能对原有模块进行优雅降级。即:一个系统支持多种数据库,来实现数据库层的迁移,升级等。
    (3).失败恢复也是要考虑的,失败后,需要把失败前驻留在内存中的消息找回来。
    (4).另外,DAL本身也在快速的迭代当中,升级是很经常的事,应能进行在线热升级(不重启原有服务)。

    3.良好的性能。

    对于根据id来取进行的查询,在缓存命中的情况下,应该达到和Memcached不相上下的读取速度。在缓存不命中的情况下,则应该充分利用分库分表和并行计算的优势,最大化地提高查询的效率。对于修改型查询,挂在上面的监听器,不应该影响性能。

    4.易于编程。

    需要设计一套简单好用的API便于应用程序的开发。API必须是自完备的应用开发者不需要太费力就能记住的。应用开发人员不再关心分库分表问题,不再关心缓存问题,特别是缓存清除问题。甚至不再关心后端的数据库是MySQL,还是Oracle,或者是其它。

    5.可定制、可扩展、可维护的架构设计。

    像连接池组件、缓存组件、查询分析组件、消息队列组件、通讯协议等等不应该写死,应设计成可方便定制的。还应该提供足够的钩子用于扩展。只有这样,DAL 的架构才是灵活的、拥抱变化的。简单说,我们定的是机制,提供的是策略,机制是软件目标和宗旨的体现,一般是不能轻易改变的,而策略则应当是能比较简单地进行切换的。

    分布式数据访问层应用案例

    1.TDDL

    淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能。
    TDDL所处的位置(tddl通用数据访问层,部署在客户端的jar包,用于将用户的SQL路由到指定的数据库中):
    这里写图片描述
    淘宝很早就对数据进行过分库的处理, 上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行统一访问。DBRoute对数据进行多库的操作、数据的整合,让上层系统像操作 一个数据库一样操作多个库。但是随着数据量的增长,对于库表的分法有了更高的要求,例如,你的商品数据到了百亿级别的时候,任何一个库都无法存放了,于是 分成2个、4个、8个、16个、32个……直到1024个、2048个。好,分成这么多,数据能够存放了,那怎么查询它?这时候,数据查询的中间件就要能 够承担这个重任了,它对上层来说,必须像查询一个数据库一样来查询数据,还要像查询一个数据库一样快(每条查询在几毫秒内完成),TDDL就承担了这样一 个工作。在外面有些系统也用DAL(数据访问层) 这个概念来命名这个中间件。
    下图展示了一个简单的分库分表数据查询策略:
    这里写图片描述
    主要优点:
    (1).数据库主备和动态切换
    (2).带权重的读写分离
    (3).单线程读重试
    (4).集中式数据源信息管理和动态变更
    (5).剥离的稳定jboss数据源
    (6).支持mysql和oracle数据库
    (7).基于jdbc规范,很容易扩展支持实现jdbc规范的数据源
    (8).无server,client-jar形式存在,应用直连数据库
    (9).读写次数,并发度流程控制,动态变更
    (10).可分析的日志打印,日志流控,动态变更
    TDDL必须要依赖diamond配置中心(diamond是淘宝内部使用的一个管理持久配置的系统,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理,同时diamond也已开源)。
    TDDL源码:https://github.com/alibaba/tb_tddl

    2.CobarClient

    Cobar Client是一个轻量级分布式数据访问层(DAL)基于iBatis(已更名为MyBatis)和Spring框架实现。
    这里写图片描述
    主要特性:
    (1).可以支持垂直和水平数据切分数据库集群的访问。
    (2).支持双机热备的HA解决方案, 应用方可以根据情况选用数据库特定的HA解决方案(比如Oracle的RAC),或者选用CobarClient提供的HA解决方案。
    (3).小数据量的数据集计(Aggregation), 暂时只支持简单的数据合并。
    (4).数据库本地事务的支持, 目前采用Best Efforts 1PC模式的事务管理。
    (5).数据访问操作相关SQL的记录, 分析等.(可以采用国际站现有Ark解决方案,但CobarClient提供扩展的切入接口)。

    展开全文
  • 【JAVA】数据访问层

    千次阅读 2016-08-26 17:37:14
    java:数据访问层
    在学习数据访问层之前,需要了解的一个术语:持久化。持久化是将程序中的数据在瞬时状态和持久状态间转换的机制。
    持久化的主要操作包括:保存、删除、修改、读取和查找等。
    

    DAO模式

    DAO(DataAccessObjece,数据存取对象),是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。

    DAO模式的优势,在于它实现了两次隔离。

    1. 隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了耦合性,提高了可复用性。
    2. 隔离了不同数据库实现。采用面向接口编程,如果底层数据库变化,如由SQL Server变成Oracle,只要增加DAO接口的新实现类即可,原有SQL Server实现不用修改。这符合“开–闭”原则,降低了代码的耦合性,提高了代码扩展性和系统的可能性。

    DAO模式主要由以下几个部分组成:

    1. DAO接口:把对数据库的所有操作定义成抽象方法,可以提供多种实现。
    2. DAO实现类:针对不同数据库给出DAO接口定义方法的具体实现。
    3. 实体类:用于存放与传输对象数据。数据类型、名称与数据库一一对应。
    4. 数据库连接和关闭工具类:避免了数据库连接和关闭代码的重复使用,方便修改。

    分层开发

    优势:

    1. 每一层专注与自己的功能实现,便于提高质量。不同层次的关注点是不同的,数据访问层主要是数据库访问,业务逻辑层的重点是业务逻辑,前端表示层专注于页面的布局和美观。
    2. 便于分工协作,从而提高效率。一旦定义好各个层次之间的接口,每个开发人员的任务得到了确认,不同层次的开发人员就可以各司其职、齐头并进,从而大大加快开发进度。
    3. 便于代码复用。每个模块一旦定义好统一的对外接口,就可以被各个模块调用,而不用对相同的功能进行重复开发。例如,不同的业务逻辑模块如果需要对相同数据库表进行操作,无须各自开发相应的DAO模块,复用即可。
    4. 便于程序扩展。例如,DAO模式中采用面向接口编程,底层数据库发生变化,可以通过增加接口的新实现类解决,实现无损替换,而不是修改原有代码,便于程序扩展。

    分层的原则:

    1. 每一层都有自己的职责。例如硬件负责存储、运算、通信等;而操作系统负责管理硬件;应用软件工作在操作系统上,实现业务功能,满足用户需求。
    2. 上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用起功能。例如应用软件不需要知道操作系统是如何管理硬件的,而操作系统也无需关心硬件的具体生产流程。
    3. 上一层调用下一层的功能,下一层不能调用上一层功能。下一层为上一层提供了服务,而不能使用上一层提供的服务。

    分层的其他原则:

    1. 封装性原则:简单而言,就是每个层次向外提供公开统一接口,而隐藏内部的功能实现细节,其他层次不能也没必要了解其内部细节。
    2. 顺序访问原则:下一层为上一层提供服务,而不使用上一层的服务。业务逻辑层可以访问数据访问层的功能,而数据访问层不能访问业务逻辑层的功能。

    使用实体类传递数据

    1. 实体类的属性一般使用private修饰。
    2. 根据业务需要和封装性要求对实体类的属性提供getter/setter方法,负责属性的读取和赋值,一般使用public修饰。
    3. 对实体类提供无参构造方法,根据业务需要提供相应的有参构造方法。
    4. 实体类最好实现java.io.Serializable接口,支持序列化机制,可以将该对象转换成字节序列而保存在磁盘上或在网络上传输。
    5. 如果实体类实现了java.io.Serializable接口,就应该定义属性serialVersionUID,解决不同版本之间的序列化问题。
    展开全文
  • DAO(Data Access Objects)数据访问层介绍

    万次阅读 2018-07-04 18:32:38
    DAO(Data Access Objects)数据访问层介绍介绍目录:(1)DAO设计模式简介(2)一般企业分层架构(3)DAO设计模式(5)DAO层实现例子什么是dao模式,dao模式的实现方法(1)DAO设计模式简介1)、DAO全称是(Data ...
  • 所谓的三层开发就是将系统的整个业务应用划分为表示层——业务逻辑层——数据访问层,这样有利于系统的开发、维护、部署和扩展。 分层是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个...
  • 数据访问层MyBatis解析

    千次阅读 2017-04-06 17:46:56
     最近在研究Java的框架,刚刚接触到java对于数据访问层封装的框架之一,MyBatis,不得不说使用起来很是方便,跟写sql语句的感觉一样一样的;顺便读了少部分官方文档,由于英文有限读的太慢,只是读了一点关于作用域...
  • 三层架构和MVC是两个东西。...三层架构中业务逻辑层和数据访问层对应MVC中的Model   由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调
  • 数据访问层(连接数据库)

    千次阅读 2017-05-06 23:36:54
    数据访问层:又称为DAL层,有时候也称为是 持久层,其功能主要是负责数据库的访问。简单的说法就是实现对数据表的Select(查询),Insert(插入),Update(更新),Delete(删除)等操作。如果要加入ORM的元素,...
  • 第4章 数据访问层

    千次阅读 2016-06-13 10:35:51
    随着数据量和访问量的上升,应用访问数据库也会出现瓶颈,这时数据访问层出场! 4.1 数据库从单机到分布式的挑战 4.1.1 单机数据库 当网站比较小,数据库的数量和访问量都比较小时,只有一个数据库,所有的table 都...
  • 业务层(service)需要根据系统的实际业务需求进行逻辑代码的编写,有些业务逻辑需要通过与数据库交互的,则业务逻辑层需要调用数据访问层的相关方法实现与数据库的交互,对于一些不需要与数据库进行交互的,则直接...
  • 三层架构:表示层——业务逻辑层——数据访问层 1.什么是三层架构  所谓的三层开发就是将系统的整个业务应用划分为表示层——业务逻辑层——数据访问层,这样有利于系统的开发、维护、部署和扩展。  ...
  • 数据访问层可能会操作不同的数据库,可是业务逻辑层我感觉没必要吧,不管从哪个数据库都是一种逻辑判断吧?我感觉没必要写两个实现类
  • 微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。  三层结构原理:  3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。  所谓三层...
  • 前言:在上一篇《Spring学习笔记...在本篇文章中我们就来看看Spring在数据访问层中起到的作用。本篇以实践为主,并不涉及到源码的深入分析。 一、什么是数据访问层/持久层/DAO层? 在Web应用中,为了降低系统的
  • 数据访问层的设计(一)——功能与接口定义
  • .Net企业级应用架构设计之数据访问层

    千次阅读 多人点赞 2012-09-12 12:17:01
    数据库独立性:数据访问层是系统中唯一知道并使用连接字符串和数据表名称的地方,考虑到这些,数据访问层必须要依赖于数据库管理系统DBMS,对于外部观察者,数据访问层应该就像一个黑盒,可以插入到现有系统中,
  • 数据访问层的设计

    千次阅读 2006-08-21 11:44:00
    数据访问层的设计引言 数据源的不确定性,以及数据结构的不统一,为客户提供统一的数据访问层成为必要,然而数据库的不确定性给访问层的开发带来了极大的麻烦。根据这种情况,在本次的设计中,暂提出以下的两种解决...
  • 三层架构 软件设计架构 界面层(表示层、变现层): 用户看的界面。 用户可以通过界面上的组件和服务器进行交互 业务逻辑层: 处理业务逻辑。...数据访问层: 操作数据存储文件。 三层架构和MVC ...
  • (1)如何对外提供数据访问层的功能 数据访问层就是方便应用进行数据读写访问的抽象层,在该层上解决各个应用通用的访问数据库的问题。 上图显示了三种方式,第一种是为用户提供专有API,不过不推荐,通用性很...
  • 首先解释面上意思,service是业务层,dao是数据访问层。 呵呵,这个问题我曾经也有过,记得以前刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用,其他有意义的事没做,也不明白有...
  • 作为保证项目质量的重要工具持续集成一直是一个热议的话题,也被业界积极采用。我也试图记录自己在尝试过程中遇到的点点滴滴。...这些问题萦绕心头已久,现在从数据访问层入手,逐步深入,记录所思所为。
  • 这篇博客我们将继续进入我们的下一层:数据访问层。无论你用的是什么开发模式或者是业务模式,到最后最必须具有持久化机制,持久化到持久化介质,并能对数据进行读取和写入CRUD。这就是数据访问层。你可能是利用xml...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,106,575
精华内容 442,630
关键字:

数据访问层