C#学习笔记(六)多层应用程序设计

    技术2022-05-11  51

    对于大部分商业应用程序,核心的设计在于数据层和商务逻辑层。没有一个“正确”的解决方案,只能按需交替使用……

    多层设计概述

    表现层、商务逻辑层、数据访问层和数据存储。原因:分享逻辑思维的需要。团队或多语言开发的需要。重用商务逻辑与数据层的需要。

    这里的多层是逻辑设计,打包和旋转是物理设计。

     

     

    商务逻辑层

    支持商务过程中所有涉及安全、商务规则(逻辑)和数据的处理(校验、数据操作)。对于BankingApp来说,它可能会加强银行规则的处理,如账户类型、最小余额、借款数额等。

    1)整体设计(完全OOP、大颗粒OOP、不使用OOP)。完全OOP:任何事物都是对象,大概会有1000多个对象存储在RAM。例如Customers、Orders、Products、Addresses……OOP的巨大能量能处理任何的问题,但也带来一定的压力。大颗粒(Large-grain)OOP:任何事物都是对象,但对象是大颗粒的,少量的全面的对象,虽然不优雅,但是更实际。例如:不把所有的Customers都存储在RAM中,而是通过ID获得唯一的Customer,可以查找Customer IDs的子集。public class Customers{    public Customer Get(int customerID)    {...}    public int[] Search(...)    {...}}

    不使用OOP:没有对象-返回过程样式的编程,没有类-基于结构和静态方法。

    2)安全性

    安全性对于任何一层的设计都有潜在的影响。如:谁将使用本系统?(验证)是否允许该用户进行此操作?(权限)在何处进行安全检验?(商务逻辑层。表现层是否需要反映出用户的权限?数据层是否需要进行检查?)

    最基本的是通过商务规则进行检验。

    3)商务规则

    典型地通过明确的编码表现。不同的商务情况有不同的规则。如:客户是不是有信用额度?用户是否有权限做修改?等等。但有一条通用的规则就是校验——validation。

     

    4)数据校验处理

    表现层的检验是第一级:如整型输入检验。商务逻辑层:再做一次额外检验,例如ID是否有效,E-mail是否有效。通过编写有力的代码控制及正则表达式(Regular Expressions)...正则表达式是强大的检验技术,它将有效的输入表现为一种模式,对用户的输入,运行模式进行检验。例如:/d指定单一的数字。{0,1,2,3,4,5,6,7,8,9}。而“/w+@/w+”是一个简单的Email地址模式。即一个或多个字符加上@再加一个或多个字符。

    检验Zipcode是否符合US的标准:模式:^表示开始 ?表示可选 $表示结束。

    using RE=System.Text.RegularExpressions.Regex;public class Validation{    public static bool isUSZipcode(string s)    {        string pattern;        pattern= @"^(/d{5})((/-/d{4})?)$";        return RE.Match(s,pattern).Success;

        }

    }

    防止SQL输入攻击:在数据被传入数据层之前,对于文本框的内容必须检验。把单引号转换为双引号等。

    数据访问层

    数据访问层并不管理和存储数据,它只是提供商务逻辑层和数据库之间的接口。1)接口是High-Level或者Low-Levvel?High-Level接口隐藏BT传来的细节信息。如DataStore.update(customer);只传递过去了一个对象。Low-Level则将数据存储细节延伸到了BT。例如先生成SQL语句交由数据访问层执行。

    为解决两种接口之间的矛盾,可将数据访问层分为两级接口。后一级执行ADO.net代码,前一级负责构造SQL语句。

    2)是使用存储过程还是动态SQL语句?存储过程由DBAs编写,使数据库模式与应用程序分离,提供数据访问控制的另一层,封装复杂的SQL,保证事务执行,可能大幅度提高性能。执行存储过程通过标准的ADO.net机制来执行。

    超级信徒把所有的DAT实现在数据库!参见:http://www.adoguy.com/

    Vendor-specific:存储过程对数据库有依赖性。即“提供商制订规则”,相应对DBA要求较高。另外灵活性会降低一些。对于数据访问层的改变将影响数据库。

     

    层之间如何传递数据?1)基本类型的数组?2)对象的集合?3)原始的DataSet?4)强类型DataSet?

    强类型DataSet

    强类型DataSet是特殊化的DataSet。是从DataSet继承的定制对象,可通过其显露的属性(properties)来封装数据进行强类型的访问。避免了字段的晚期绑定,强类型DataSet提供了强类型的访问器,因为避免了到一个集合中查找列名或表名,访问时更快。除了提高运行性能,还提供了类型检验,可在设计时通过自定义字段名对字段智能感知。

    建立强类型:方便、面向对象且易建立,使用Visual Studio进行。

    强类型DataSet==BT(商务逻辑层)?1)建立强类型DataSet2)添加一些实现商务逻辑的方法

    可以这样工作,但要注意,如果DB的模式发生了改变,必须重新建立强类型,这时将失去商务逻辑。(注:这是.net1.0里面的说法,后来参考相关资料,在.net2.0中通过Partial类可以解决这一问题)。 


    最新回复(0)