zoukankan      html  css  js  c++  java
  • 第八讲:多层结构应用程序设计

    *多层设计
    商业应用程序一般会有多层
    表现层,商务逻辑层,数据访问层和数据存储
    Presentation-->Business-->Data Access-->DataStore

    *不要弄混逻辑与物理
    使用多层是逻辑设计
    打包和放置是物理设计

    *三种解决方案
    全完OOP:
    任何事物都是对象,在概会有1000多个对象存储在RAM
    例如:Customers,Producte,Orders,Addresses,...
    OOP的巨大能量能处理任何的问题,但也带来一定的压力。
    大颗粒(Large-grain)OOP:
    任何事物都是对象,但是对象是大颗粒的。
    少理的全面的对象,虽然不优雅,但是更实际。

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

    *正则表达式
    REs是强大的检验技术
    过程:
    有效的输入被表现为一种模式
    对于用户的输入,运行模式进行检验。
    例如:
    "\d"指定单一的数字{0,1,2,3,4,5,6,7,8,9}
    "\w+@\w+"是一个简单的Email地址模式。
    (1个或多个字符加上@再上一个或多个字符)

    例子:检验Zipcode是否符合US的标准
    Zip or Zip+4
    模式:^表示开始,?可选,$结束
    public static bool isUSZipcode(string s)
    {
     string patten;
     patten=@%22%5E(\d%7B5%7D)((\-\d%7B4%7D)?)$";
     return RE.Match(s,pattern).Success;
    }

    *防止SQL输入攻击
    在数据被传入到数据层之前,对于文本框的内容必须检验。
    public static bool isProperlyEscaped(string s)
    {
     string pattern="^([^']|(''))*$";
     return RE.Match(s,pattern).Success;
    }

    if(Validation.isProperlyEscaped(s))
    {
     //okay
    }
    else
    {
     s=s.Replace("'",""");
    }

    *数据访问层并不管理和存储数据,它只是提供商务逻辑层和数据库之间的接口。
    *如何设计接口?
    考虑的主要问题:
    High-level or low-level接口?
    存储过程或者动态SQL语句?

    *强类型DataSets
    强类型DataSet是特殊化的DataSet
    1、强类型DataSet是从DataSet继承的定制对象,它可以通过其显露的属性(properties)来对封装数据进行

    强类型的访问。
    2、强类型DataSet避免了字段的晚绑定。强类型DataSet提供了强类型的访问器,因为避免了到一个集合中

    查找列名或表名,访问时更快。
    3、除了能够提高运行时的性能,强类型DataSet还提供了类型检查,并且在设计时可以通过自定义字段名

    对字段智能感知。


    *用户数据的例子:
    System.Data.DataSet             DS;
    DataAccessTier.CustomersDataSet customersDS;
    ...
    dataAdapter.Fill(DS);
    FirstName=DS.Tables["Customers"].Rows[i]["FirstName"].ToString();
    //比较
    dataAdapter.Fill(customersDS);
    FirstName=customersDS.customers[i].FirstName;

    *如何建立强类型
    方便的,面向对象的,且易建立的
    可以使用Visual Studio来建立
    DB-->schema.xsd-->XSD-->typed dataSet.cs

    付加一段代码,方便记忆!

    SpecialRoomDataTableAdapters.BookingRoomTableAdapter brt = new SpecialRoomDataTableAdapters.BookingRoomTableAdapter();
    SpecialRoomDataTableAdapters.ClassTableAdapter crt = new SpecialRoomDataTableAdapters.ClassTableAdapter();
    SpecialRoomData.BookingRoomDataTable sr=new SpecialRoomData.BookingRoomDataTable();
    SpecialRoomData.ClassDataTable ct = new SpecialRoomData.ClassDataTable();

        protected void Page_Load(object sender, EventArgs e)
        {

           
            brt.Fill(sr);
           
            crt.Fill(ct);
            Label1.Text = sr[0].BTeacherName;
            GridView1.DataSource = ct.DefaultView;
            GridView1.DataBind();

        }

  • 相关阅读:
    powershell,系统学习的第一种脚本语言
    mysql的source命令
    timer--计时器
    document.write 方法
    数组去重
    Abdicate
    轮播图
    使用 margin 让div块内容居中
    模运算 NOJ 1037
    模运算 NOJ 1037
  • 原文地址:https://www.cnblogs.com/iceberg2008/p/1402089.html
Copyright © 2011-2022 走看看