ASP.NET动态网站制作(27)-- 三层框架(1)
前言:今天主要介绍一下三层框架,给大家一个整体的概念。分层概念使得程序低耦合,更加健壮,扩展性更好。
内容:
1.三层:
UI(表现层):主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。
BLL(业务逻辑层):UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。
DAL(数据访问层):与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当然这些操作都是基于UI层的。用户的需求反映给界面(UI),UI反映给BLL,BLL反映给DAL,DAL进行数据的操作,操作后再一一返回,直到将用户所需数据反馈给用户)
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表进行增删改查。
public static BaseDAL<UserInfor> m_UserInforDal = new BaseDAL<UserInfor>();
上面是一个泛型形式的对象,并且是静态的,说明我们可以通过类来调用所有的增删改查的方法。框架中的所有增删改查方法都位于BaseDAL.cs中。是整个框架中最核心的部分。
12.调用数据库处理方法:
//GetModel()的两种用法
UserInfor user = UserInforDal.GetModel();//18表示UserId=18 //防SQL注入的方法
List<dbParam> listPm = new List<dbParam>();
listPm.Add({
ParamName="@UserName",
ParamDbType = DbType.String,
ParamValue = username
});
listPm.Add({
ParamName="@Pwd",
ParamDbType = DbType.String,
ParamValue = pwd
});
UserInfor user = UserInforDal.GetModel("UserName=@UserName and Pwd=@Pwd",listPm);
13.除了上面的防SQL注入方法,还有另外一种方法:WebSafe.cs文件(在Utility文件夹中):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace com.Utility
{
public class WebSafe
{
public static bool SqlInsert(string strS)
{
bool b = true;
string sql = "exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare |drop |creat ";
string[] sql_c = sql.Split('|');
foreach (var sl in sql_c)
{
if (strS.ToLower().IndexOf(sl) >= )
{
b = false;
break;
}
}
return b;
}
}
}
Login.aspx.cs:
string username = txtUserName.Text.Trim();
string pwd = txtPwd.Text.Trim();
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(pwd))
{
Response.Write("<script>alert('用户名或者密码不能为空');</script>");
}
else
{
try
{
11 if (WebSafe.SqlInsert(username) == false || WebSafe.SqlInsert(pwd) == false)
{
Response.Write("<script>alert('内容包含不安全因素');</script>");
}
else
{
UserInfor user = UserInforDAL.m_UserInforDal.GetModel(string.Format("UserName='{0}' and Pwd='{1}'", username, pwd));
if (user == null)
{
Response.Write("<script>alert('用户名或者密码错误');</script>");
}
else
{
if (chk.Checked)
{
Response.Cookies["username"].Expires = DateTime.Now.AddHours();
}
Response.Cookies["username"].Value = username;
Response.Redirect("RNewsM.aspx");
}
}
}
catch
{
Response.Write("网页正在维修中....");
}
}
项目中常用这种方式。
后记:多练习,多实践。
ASP.NET动态网站制作(27)-- 三层框架(1)的更多相关文章
- ASP.NET动态网站制作(3)--css(2)
前言:css分为四次课讲完,第一节课内容见ASP.NET动态网站制作(2)--css(1),接下来的内容会涉及到定位.浮动.盒子模型(第二次课).css的具体应用(第三次课).css3(第四次课).今 ...
- ASP.NET动态网站制作(28)-- 三层框架(2)
前言:三层框架的第二节课,继续上次课的内容. 内容: 1.三层框架的使用目的:可以将视图层和业务逻辑层及实体层分开,可以提高代码的扩展性,安全性,可以实现程序的低耦合性. 2.GetModel方法及G ...
- ASP.NET动态网站制作(1)--html
前言:正式上课的第一课,讲的是前端部分的最基础内容:html. 前端:html,css,js 数据库:sql server 动态部分:.net,c#... IIS(Internet Informati ...
- ASP.NET动态网站制作(20)-- C#(3)
前言:C#的第三节课,继续上次课的内容,依旧围绕基础的只是讲解. 内容: 1.StringBuilder类:由于string类一旦创建,则不能更改.如果做字符串拼凑的话,将会非常耗费空间,如: str ...
- ASP.NET动态网站制作(17)-- C#(1)
前言:用C#也有一年多了,基本上都是边用边学的,现在可以跟着老师系统的学习一下,感觉应该挺好的. 内容: 1.网站部署的相关内容: (1)想要做一个网站,首先得去买一个域名,老师的域名是在美橙上买的 ...
- ASP.NET动态网站制作(0)
前言:一直想系统地学习一下网站建设的相关内容,看过相关的书籍,也跟着视频学过,但总觉得效率不高,学过的东西印象不深刻,或许还是自己动手实践的少.无意中免费听了一堂讲ASP.NET网站建设的课,觉得性价 ...
- ASP.NET动态网站制作(29)-- 正则
前言:继续讲框架,然后介绍正则的相关知识. 内容: 1.封装分页方法,方便以后调用:响应的CSS代码也可以封装. 2.WEB层里面的页面名称不要和model和dal里面的名称相同. 3.两个表联合查询 ...
- ASP.NET动态网站制作(26)-- Ajax
前言:这节课讲解关于Ajax的相关内容. 内容: 1.当点击页面中的一个按钮提交数据或请求数据的时候,整个页面的信息都会提交(不管信息是否是提交或者请求的数据,页面中所有的数据都提交),这样耗用的时间 ...
- ASP.NET动态网站制作(24)-- ADO.NET(3)
前言:ADO.NET的第三节课.今天主要讲SQL Helper. 内容: 1.DataReader和DataSet的区别: (1)DataReader是一行一行地读,且只能向前读:DataSet是一次 ...
随机推荐
- kettle新手教程
1.kettle介绍 kettle是一个ETL(Extract, Transform and Load抽取.转换.加载)工具,ETL工具在数据仓库项目使用很频繁,kettle也能够应用在下面一些 ...
- 【AS3 Coder】任务八:没剧情还玩毛RPG
使用框架:AS3任务描述:了解RPG游戏中剧情播放器的制作原理及流程难度系数:3(了解原理,能根据XML文件播放剧情) / 5(会制作剧情编辑器) 本章源码下载:http://www.iamseven ...
- 在Docker中从头部署自己的Spark集群
由于自己的电脑配置普普通通,在VM虚拟机中搭建的集群规模也就是6个节点左右,再多就会卡的不行 碰巧接触了Docker这种轻量级的容器虚拟化技术,理论上在普通PC机上搭建的集群规模可以达到很高(具体能有 ...
- Tempter of the Bone——DFS(王道)
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...
- 转: android 内存检测工具 LeakCanary 说明
http://www.liaohuqiu.net/cn/posts/leak-canary-read-me/ LeakCanary 中文使用说明 10 May 2015 LeakCanary Andr ...
- android EditText inputType 及 android:imeOptions=”actionDone”
一.android 软件盘事件响应 在android中,有时需要对EditText实现软件盘监听的场景.当android按下软键盘的时候,响应完成.发送.搜索或者其他事件. Google 提供了 Ed ...
- getopt函数的用法
Linux提供了一个解析命令行参数的函数. #include <unistd.h> int getopt(int argc, char * const argv[], const char ...
- Linux信号(signal) 机制分析(转)
[摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执 ...
- C语言 | 计算器实现 version 2.
在之前版本中使用栈结构来实现,但由于51单片机不支持malloc函数,所以使用C语言又写了一个计算器版本. 通过数组存放值和操作符模拟栈操作. 实现代码: #include <stdio.h&g ...
- [性能测试] LoadRunner结果分析 – TPS(转)
[性能测试] LoadRunner结果分析 – TPS 针对吞吐率和 TPS 的关系,这个在结果分析中如何使用,就个人经验和朋友讨论后,提出如下建议指导,欢迎同僚指正. 相关定义 响应时间 = 网络响 ...