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是一次 ...
随机推荐
- Linux下使用GDB进行调试
Linux下使用GDB进行调试的常用命令记于此. $ sudo su # g++ -g test.cpp -o test -pthread # gdb test <------- ...
- chromatic aberration
https://github.com/keijiro/KinoFringe https://en.wikipedia.org/wiki/Chromatic_aberration 色差偏移 做神经病效果 ...
- 深入理解Vue父子组件通讯的属性和事件
在html中使用元素,会有一些属性,如class,id,还可以绑定事件,自定义组件也是可以的.当在一个组件中,使用了其他自定义组件时,就会利用子组件的属性和事件来和父组件进行数据交流. 父子组件之间的 ...
- linux 局域网内文件传送
Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好介绍一下,从本地复制到远程.从远程复制到本地是两种使用方式.这里有具体举例: ================== Linu ...
- 一个简单的java回调函数的实现
回调函数 回调函数涉及的3个函数 登记回调函数 回调函数 响应回调函数 简单的解释 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话.过了几天店里有货了,店员就打了你的电话,然 ...
- Android Exception 15(关于使用RecyclerView的异常)
04-07 16:32:32.815: E/AndroidRuntime(16173): FATAL EXCEPTION: main 04-07 16:32:32.815: E/AndroidRunt ...
- 通过Jenkins部署java项目
部署java项目-创建私有仓库 Jenkins大多数情况下都是用来部署Java项目,Java项目有一个特点是需要编译和打包的,一般情况下编译和打包都是用maven完成,所以系统环境中需要安装maven ...
- linux文本命令
1.find和grep find命令的作用是在目录中根据文件名搜索文件,grep命令的作用是在目录中根据文件内容搜索文件,find和grep的使用权限是所有用户. (1)find命令: find 列出 ...
- lua与c++ 中布尔布bool值对应关系
lua代码返回值为真c++ lua_toboolean 返回一个 int lua true = 1 false = 0 c++给lua返回 lua_pushboolean 1 = true 0 = ...
- scrollTop()--返回或设置匹配元素的滚动条的垂直位置
scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置. scroll top offset 指的是滚动条相对于其顶部的偏移. 如果该方法未设置参数,则返回以像素计的相对滚动条顶部的偏移. ...