代码改变世界

NET 应用架构指导 V2 学习笔记(二十二) 设计数据访问组件

2010-06-09 06:53  Virus-BeautyCode  阅读(2081)  评论(1编辑  收藏  举报

  概况

  数据层组件提供了访问系统边界内,或者是其他系统暴露的数据的方法。包括数据访问组件,用来访问系统边界内的数据,服务代理组件,用来访问其他服务暴露的数据。另外,还可能包含其他帮助功能和工具类的组件。

  本章将帮助你理解设计数据组件基本的步骤。第一步是确定对于访问的数据有什么限制条件,帮助你选择适当的数据访问技术。接下来是选择映射策略,决定数据访问方法。然后决定数据访问组件如何连接数据源。最后,确定异常处理策略,和对数据源异常的管理。

  设计步骤

  1 选择数据访问技术

  选择一个适当的数据访问技术一定要考虑你要处理的数据类型,你要如何操作数据。可以参考下面的设计原则:

  •   ADO.NET Entity Framework:如果你想要创建一个数据模型,把它映射为一个关系数据库,使用继承将一个类映射为多张表,或者是查询不是SQL SERVER家族产品的关系存储,都可以考虑使用EF。如果你使用EF,考虑使用LINQ to Entity执行强类型实体的查询,或者使用LINQ语法来查询关系数据库。
  •   ADO.NET Data Service Framework:Data Service是建立在EF之上的,允许你通过REST暴露实体模型。如果你开发一个RIA或者是富客户端应用,想要通过一个服务接口访问数据源,可以考虑使用Data Service。
  •   ADO.NET Core:如果你需要用低级别的API来对数据访问完全的控制,考虑使用ADO.NET Core。
  •   ADO.NET Sync Service:如果你设计的应用需要支持偶尔在线的方案,或者是需要和数据库同步,可以考虑使用Sync Service。
  •   LINQ to XML:如果使用XML作为数据源,可以考虑LINQ to XML。

  2 如何从数据源获取数据,如何持久化业务对象

  对象和关系之间的不匹配给他们之间的映射带来很多麻烦,但是也有很多方法可以处理这个问题,也根据不同的数据类型、结构、如何操作数据而不同。常用的办法是ORM工具或者框架。参考下面的设计步骤:

  •   考虑使用ORM框架实现领域实体和数据库之间的翻译。
  •   常用的设计模式为领域模型。
  •   确保你的实体是高内聚的。

 

  3 决定如何连接到数据源

  •   连接
    •   连接到数据源是数据层的基础组成。
    •   确保尽量少打开数据连接,尽早关闭数据连接。
    •   通过一个连接来完成事务操作。
    •   使用连接池和优化性能。
    •   出于安全原因,避免使用系统或者是用户的DSN存储连接信息。
    •   为连接错误和超时设计重新尝试的机制。
    •   批量执行命令,尽量减少数据服务器的往来。

  

  •   连接池

  连接池允许使用池中的连接资源,如果没有合适的连接,就创建一个放入池中。当关闭连接的时候,连接被放回到池中,任然保持连接。意味着ADO.NET不是每次都创建一个新的连接。尽管池保持连接的代开消耗了一些资源,但是减少了数据访问延迟,从连接池获取连接使得应用更加高效。

  •   事务和并发

  可以选择下面的三种事务实现:

    •   System.Transactions
    •   ADO.NET Transactions
    •   T-SQL (Database) Transactions

 

 

  4 确定处理数据源异常的策略

  所有和数据源有关的异常都应该被数据层捕获。异常关注数据本身、数据源的访问、超时错误,应该在数据层处理,如果影响到应用的响应和功能,就需要传递到其他层。

  •   异常
    •   决定应该被数据层捕获和处理的异常。死锁、连接问题、乐观并发的问题。
    •   考虑数据源发生错误或者是超时的时候,提供一个重新尝试的机制,在安全的控制内。
    •   设计适当的异常传播机制。
    •   设计适当的日志和通知策略。
    •   考虑使用现有的成熟框架实现。
  •   重新尝试的机制

  

  •   超时

 

  5 设计服务代理(可选)

  •   选择适当的工具添加服务引用。生成代理类,和代表服务数据契约的数据类。
  •   确定在应用中如何使用服务。服务代理就是一个处于业务层和远程服务之间的抽象层,为数据提供一致的接口。在小型应用中,表现层可以直接访问服务代理。

 

  未完待续。。。。。。。。。。。。。。