数据层组件设计与数据传递11

时间:2010-02-02 08:29:48  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:在没有高层次业务过程的帮助下对单个业务实体执行事务性操作的情况。例如,要把一个新客户添加到前面讨论的数据库中,您必须执行以下操作:      在 Customer 表中插入新的一行。   在 Address 表中插入新的一行或多行。     只有这两个操作都成功后客户才会被添加到数据库中。如果 Customer 业务实体不会成为启动该...
  正文:实现事务处理
    在大多数环境中,事务处理的根本是业务过程而不是数据访问逻辑组件或业务实体组件。这是因为业务过程一般要求事务处理跨多个业务实体而不仅仅是单个业务实体。
  
    然而,也可能出现在没有高层次业务过程的帮助下对单个业务实体执行事务性操作的情况。例如,要把一个新客户添加到前面讨论的数据库中,您必须执行以下操作:
  
  在 Customer 表中插入新的一行。
  在 Address 表中插入新的一行或多行。
    只有这两个操作都成功后客户才会被添加到数据库中。如果 Customer 业务实体不会成为启动该事务处理的更大的业务过程的一部分,则应在 Customer 业务实体中使用手动事务处理。手动事务处理不要求与 Microsoft 分布式事务处理协调器 (DTC) 之间进行任何进程间通信,因此比自动事务处理要快得多。
  
    图 11 所示为确定使用手动事务处理还是自动事务处理的方法。由于 COM+ 事务处理的系统开销,建议将事务处理放到数据库中并在存储过程中控制事务性行为(如果可能)。
  
  
  图 11:确定如何实现事务处理
  
  注意:如果从基于 ASP/ target=_blank class=infotextkey>asp.net 的客户端进行调用,并且没有用于启动事务处理的业务过程,则您可能会从 ASP.NET 代码中启动该事务处理。这种设计并不好;您决不能从基于 ASP.NET 的客户端启动事务处理,而应将数据的展示与业务过程相分离。此外,由于网络滞后等问题还会导致性能问题,因为这是要实际部署在其他层上的最常见的层。
    在数据访问逻辑组件中使用手动事务处理的建议
    在数据访问逻辑组件中实现手动事务处理时,请考虑以下建议:
  
  尽可能在存储过程中执行处理。使用 Transact-SQL 语句 BEGIN TRANSACTION、END TRANSACTION 和 ROLLBACK TRANSACTION 控制事务处理。
  如果没有使用存储过程,并且也不会从业务过程中调用数据访问逻辑组件,则可以使用 ADO.NET 来编程控制事务处理。
    在数据访问逻辑组件中使用自动事务处理的建议
    虽然 COM+ 事务处理会带来一些系统开销,但自动事务处理能够提供比手动事务处理更简单的编程模式,而且在事务处理跨多个分布式数据源(与 DTC 一起工作)时必须使用自动事务处理。在数据访问逻辑组件中实现自动事务处理时,请考虑以下建议:
  
  数据访问逻辑组件必须是从 System.EntERPriseServices 命名空间中的 ServicedComponent 类继承而来。注意,使用 COM+ 服务注册的所有程序集都必须具有严格的名称。
  使用 Transaction(TransactionOption.Supported) 属性注释数据访问逻辑组件,以便可以在同一组件中执行读写操作。与 Transaction(TransactionOption.Required) 不同,此选项在不需要事务处理时避免了不必要的系统开销,而前者始终会要求事务处理。
    以下代码示例显示了如何在数据访问逻辑组件类中支持自动事务处理:
  
  using System.EnterpriseServices;
  [Transaction(TransactionOption.Supported)]
  public class CustomerDALC : ServicedComponent
  {
  ...
  }
  
  
    如果使用自动事务处理,则数据访问逻辑组件应在事务处理中表明操作是否成功。如果要隐式表明,应使用 AutoComplete 属性注释您的方法并在操作失败时发出一个异常。如果要显式表明,应对 ContextUtil 类调用 SetComplete 或 SetAbort 方法。
  
    在业务实体组件中使用自动事务处理
    在实现带有行为的自定义业务实体组件时,可以使用自动事务处理来指定这些对象的事务性行为。有关使用自动事务处理指定业务实体组件事务性行为的建议与前述有关在数据访问逻辑组件中实现自动事务处理的建议相同。
  
  注意:如果业务实体组件不包含任何要求其在事务处理中表明是否成功的业务逻辑,则它可以忽略事务处理环境。自定义业务实体组件不需要从 ServicedComponent 继承;事务处理环境仍将继续其流程,但实体组件将忽略事务处理环境。
    验证
    您可以在应用程序的许多层上进行数据验证。各层适用不同的验证类型:
  
  在提交数据之前,客户端应用程序可以在本地验证业务实体数据。
"数据层组件设计与数据传递11"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12729.html


关键字:

关于《数据层组件设计与数据传递11》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td