zoukankan      html  css  js  c++  java
  • 解决了对多层结构一些疑惑,整理一下!

    昨天看了一期WebCast,名字叫“Modern C#系列课程(8):多层结构应用程序设计”,解决了我对多层结构的一些疑惑,这里记录,这些问题是:商务逻辑层到底要干些什么?数据访问层确切的作用是什么?商务逻辑层和数据访问层之间的接口如何设计?使用动态的SQL语句还是存储过程?层之间如何传递数据?

    商务逻辑层到底要干些什么?
    支持商务过程中的所有涉及安全、商务规则(逻辑)和数据的处理(校验、数据操作)。

    数据访问层确切的作用是什么?

    数据访问层并不管理和存储数据,它只是提供商务逻辑层和数据库之间的接口。

    商务逻辑层和数据访问层之间的接口如何设计

    接口可以分为high-level和low-level两种。
    两种接口的例子如下:
    high-level

    public void Update(customer c)
    {
       dataStore.Update(c);
    }

    low-level

    public void Update(customer c)
    {
       
    string sql;
       sql 
    = String.Format("Update customers set ",);
       dataStore.Execute(sql);
    }

    从上边的代码可以看出high-level接口隐藏了商务逻辑层传来的细节信息,low-level接口将数据存储细节延伸到了商务逻辑层。这两种接口最大的不同就是提供细节的位置,到底依哪个为准呢?这其实是存在矛盾的。在现实中为了解决这一问题,大部分时候时候是采用一种妥协的方案。具体实现就是把DAT分成两级,如下图。

    在图中,可以把黄色箭头理解成BT传过来的数据,可以是自定义类的实例、DataSet或者其他类型的东西。图中右边的这一层是利用Ado.net的一些机制去访问数据库,去执行“CRUD”(Create/Read/Update/Delete)的一些操作。图中左边部分的任务是从BT层传来的数据中提取出需要的数据、构造SQL语句等。

    使用动态的SQL语句还是存储过程?
    使用存储过程的好处有分离数据库模式和应用程序、提供数据访问控制的另一层(存储过程本生会验证一下数据格式是否正确)、封装复杂的SQL语句、保证事务执行、对提高性能有很大帮助。使用存储过程也有一些劣势,存储过程的格式是有数据库提供商制定的,他们并不是完全一样的,另外就是会降低灵活性。个人觉得简单的操作(比如获取用户列表)可以直接使用SQL语句,而复杂一些的操作、涉及到一些验证的操作(比如添加用户)则使用存储过程。

    层之间如何传递数据?
    视频中提到的四钟,分别是基本类型的数组、对象集合、原始的DataSet、强类型的DataSet。个人觉得在数据量少的地方直接使用基本类型,数据量多而且都与某一对象相关的时候(比如客户的各种信息)可以把他们封装一下再传递。视频里介绍了强类型DataSet,也非常实用。

  • 相关阅读:
    马虎的算式
    jquery中的toggle与slideToggle的区别
    Eclipse下配置C/C++开发环境
    A ResourcePool could not acquire a resource from its primary factory or source
    hadoop mapreduce数据排序
    排序算法之选择排序
    Poj1816(Trie+DFS)
    [置顶] Android4.0 Launcher源码研究
    java第十五天_Map集合,
    VirtualBox下安装ubuntu server 16.04
  • 原文地址:https://www.cnblogs.com/ipqn/p/492448.html
Copyright © 2011-2022 走看看