zoukankan      html  css  js  c++  java
  • ASP.NET动态网站制作(27)-- 三层框架(1)

    前言:今天主要介绍一下三层框架,给大家一个整体的概念。分层概念使得程序低耦合,更加健壮,扩展性更好。

    内容

      1.三层:

      UI(表现层):主要是指用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。 

      BLL(业务逻辑层):UI层和DAL层之间的桥梁实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。

      DAL(数据访问层):与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于UI层的。用户的需求反映给界面(UI),UI反映给BLLBLL反映给DALDAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)

      2.老师推荐他之前用的一个框架。老师的三层指:视图层--web,控制层(业务逻辑层)--dal,实体层--model。

      3.新建model文件夹和dal文件夹,并向里面添加响应的项目文件(包括model.base,dal.base,utility),并分别向两个文件夹中添加新建的类库文件(model.zoe,dal.zoe)。在model.zoe里面的每一个类在数据库里面就对应一个表,类里面的每一个字段对应的就是表里面的每一个字段。

      4..NET版本向下兼容,需要看一下服务器支持的.NET版本。我买的服务器支持.NET4.0,在生成DLL时应该改一下相应的.NET版本。

      5.具体的操作过程:需要新建一个Reference文件夹,里面专门存放个程序集生成的dll文件。

      model(model.base--生成,model.zoe--生成需要引入model.base.dll);

      dal(Utility--生成,dal.base--生成需要引入model.base.dll和utility.dll);dal.zoe(生成需要引入model.base.dll和utility.dll和model.zoe.dll);

      WEB程序里需要引入model.base.dll,model.zoe.dll,utility.dll,dal.base.dll,dal.zoe.dll。

      6.上面的model文件与数据库对应,model.zoe里面的每一个类就对应数据库里面的一个表,类里面的每一个字段对应表里的每一个字段。dal.zoe里面包含所有的和数据库交互的业务逻辑代码(增删改查)。WEB里面就是呈现给用户的界面代码,web部分不应该包含业务逻辑代码和数据库操作的代码。

      7.框架是通过向model.base下面的Enums.cs文件中的DataBaseEnum中添加数据库名称而获得数据库信息的,如sql_zoe=2。每一个类库文件被改变之后一定要重新生成。

      8.动软代码生成器。

      9.一个对象就是数据库中的一条记录,通过实例化表,将其存在内存中,通过ADO.NET来调用数据库中的数据。UserInfor user = new UserInfor(); user.UserName...。

      10.在model.zoe中添加UserInfor.cs,对应于UserInfor表,并添加各字段。

      11.在dal.zoe中添加UserInforDAL.cs,表示对UserInfor表进行增删改查。

    1 public static BaseDAL<UserInfor> m_UserInforDal = new BaseDAL<UserInfor>();

       上面是一个泛型形式的对象,并且是静态的,说明我们可以通过类来调用所有的增删改查的方法。框架中的所有增删改查方法都位于BaseDAL.cs中。是整个框架中最核心的部分。

      12.调用数据库处理方法:

     1 //GetModel()的两种用法
     2 UserInfor user = UserInforDal.GetModel(18);//18表示UserId=18
     3 
     4 //防SQL注入的方法
     5 List<dbParam> listPm = new List<dbParam>();
     6 listPm.Add({
     7     ParamName="@UserName",
     8     ParamDbType = DbType.String,
     9     ParamValue = username
    10 });
    11 listPm.Add({
    12     ParamName="@Pwd",
    13     ParamDbType = DbType.String,
    14     ParamValue = pwd
    15 });
    16 UserInfor user = UserInforDal.GetModel("UserName=@UserName and Pwd=@Pwd",listPm);

      13.除了上面的防SQL注入方法,还有另外一种方法:WebSafe.cs文件(在Utility文件夹中):

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace com.Utility
     7 {
     8     public class WebSafe
     9     {
    10         public static bool SqlInsert(string strS)
    11         {
    12             bool b = true;
    13             string sql = "exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare |drop |creat ";
    14             string[] sql_c = sql.Split('|');
    15             foreach (var sl in sql_c)
    16             {
    17                 if (strS.ToLower().IndexOf(sl) >= 0)
    18                 {
    19                     b = false;
    20                     break;
    21                 }
    22             }
    23             return b;
    24         }
    25     }
    26 }

      Login.aspx.cs:

     1 string username = txtUserName.Text.Trim();
     2 string pwd = txtPwd.Text.Trim();
     3 if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(pwd))
     4 {
     5   Response.Write("<script>alert('用户名或者密码不能为空');</script>");
     6 }
     7 else
     8 {
     9   try
    10    {
    11    if (WebSafe.SqlInsert(username) == false || WebSafe.SqlInsert(pwd) == false)
    12       {
    13         Response.Write("<script>alert('内容包含不安全因素');</script>");
    14       }
    15       else
    16       {
    17           UserInfor user = UserInforDAL.m_UserInforDal.GetModel(string.Format("UserName='{0}' and Pwd='{1}'", username, pwd));
    18                         if (user == null)
    19                         {
    20                             Response.Write("<script>alert('用户名或者密码错误');</script>");
    21                         }
    22                         else
    23                         {
    24                             if (chk.Checked)
    25                             {
    26                                 Response.Cookies["username"].Expires = DateTime.Now.AddHours(1);
    27                             }
    28                             Response.Cookies["username"].Value = username;
    29                             Response.Redirect("RNewsM.aspx");
    30                         }
    31                     }
    32                 }
    33                 catch
    34                 {
    35                     Response.Write("网页正在维修中....");
    36                 }
    37             }

      项目中常用这种方式。

    后记:多练习,多实践。

  • 相关阅读:
    Photoshop 基础七 位图 矢量图 栅格化
    Photoshop 基础六 图层
    Warfare And Logistics UVALive
    Walk Through the Forest UVA
    Airport Express UVA
    Guess UVALive
    Play on Words UVA
    The Necklace UVA
    Food Delivery ZOJ
    Brackets Sequence POJ
  • 原文地址:https://www.cnblogs.com/zoe-yan/p/4950230.html
Copyright © 2011-2022 走看看