分层开发总结
2016-05-22 10:58
246 查看
1:哪些层?
UI(User Interface) 表现
BLL(Business Logic Layer) 业务逻辑层
DAL(Data Access Layer) 数据访问层
Model实体层
2:三层架构图
3:什么层
UI:表示层:负责展示页面或者窗体的内容
BLL:业务逻辑层:处理业务逻辑,只是起到一个隔离的作用
DAL:数据访问层:和数据库打交道,从数据中获取或者修改数据
Model:实体层
4:如何搭建三层架构??
解析:搭建三层架构,每个人的习惯都不同,推荐大家从最底层Model层开始,接下来是DAL层,如果我们需要更改命名空间,那么先更改,然后将系统自动生成Class1.cs删除,
对DAL层点右键→重新生成
2.接下来,创建UI,UI完毕后,添加对DAL层的引用,如果大家vs用的是2012,那么
点解决方案→勾选上对应的DAL层的名称,然后确定。
3.通过using关键字,引入命名空间!
4.重新生成UI层。
5:XML文件的典型应用,配置文件(App.Config)
现在我们的连接字符串不再保存在一个静态的字段中,而是保存在了一个名称为App.Config文件中,该文件必须在UI层添加,但是我们知道SQLHelper是在DAL层创建的。你在SQLHelper类中通过ConfigurationManager来解析App.Config,不要忘了引入命名空间,在.NET程序集下,有一个System.Configuration命名空间.
6.多路异常捕获
注意,顶级异常放在最后,次级异常放在前面
7:实体类和dataSet的优劣
实体类与DataSet相比有哪些优势?
解析:DataSet可以看成是客户端内存中的一个数据库,如果咱们用ds.Tables[0]定位到一张表后,要想获取某一行数据的某个列的值,那么
ds.Tables[0].Rows[0][“Name”]
02.因为大家都知道C#对对象这种数据处理起来比较方便,所以尽可能的通过一定的手段向面向对象靠拢。
使用实体的目的将数据库中的二维表转换成面向对象编程语言中的对象。
注意:实体只是用来在三层之间传递数据,它不属于任何一层。
8:readonly和const的区别
01.readonly只能作为类的变量存在,不能作为方法的变量存在。
02.readonly在运行的时候赋值,而const是在编译的时候系统就已经将值给了常量。
03.readonly可以修饰任何类型,而const只能声明值类型和特殊的引用类型string。
9:using关键字
1.using关键字的使用
释放资源
****用了using,还是需要try--catch的
****SQLHelper 我使用using的地方
****using的原理
为什么出了using所在的{},会自动回收对象。
原因是当我们将要出{},系统自动调用了Dispose()方法。
而在DISpose方法中是这么实现的
10:参数化防止SQL注入
1.会实现参数化SQL
1. 如果监控的count是-1,请检查方法是否正确
2. Da没有Parameters属性 ,但是可以通过一道转换,让他变成Command。
da.SelectCommand;
11:使用C#代码调用存储过程
12:MD5加密算法
案例:1经过MD5加密后c4ca4238a0b923820dcc509a6f75849b
02.MD5加密是不可逆的,只能加密不能解密
03.MD5加密一道,再用MD5,*3.14159265357 MD5
13:C#开启事务
--现象;如果SQL语句用事务进行管理,
--在事务没有执行任何一个出口(Commit和RollBack)之前,
--如果用select来检索表中的数据,那么这个时候是检索不到的,
--因为在事务执行完成前,表是被锁定的,锁定的原因是为了避免用户
--看到脏数据
UI(User Interface) 表现
BLL(Business Logic Layer) 业务逻辑层
DAL(Data Access Layer) 数据访问层
Model实体层
2:三层架构图
3:什么层
UI:表示层:负责展示页面或者窗体的内容
BLL:业务逻辑层:处理业务逻辑,只是起到一个隔离的作用
DAL:数据访问层:和数据库打交道,从数据中获取或者修改数据
Model:实体层
4:如何搭建三层架构??
解析:搭建三层架构,每个人的习惯都不同,推荐大家从最底层Model层开始,接下来是DAL层,如果我们需要更改命名空间,那么先更改,然后将系统自动生成Class1.cs删除,
对DAL层点右键→重新生成
2.接下来,创建UI,UI完毕后,添加对DAL层的引用,如果大家vs用的是2012,那么
点解决方案→勾选上对应的DAL层的名称,然后确定。
3.通过using关键字,引入命名空间!
4.重新生成UI层。
5:XML文件的典型应用,配置文件(App.Config)
现在我们的连接字符串不再保存在一个静态的字段中,而是保存在了一个名称为App.Config文件中,该文件必须在UI层添加,但是我们知道SQLHelper是在DAL层创建的。你在SQLHelper类中通过ConfigurationManager来解析App.Config,不要忘了引入命名空间,在.NET程序集下,有一个System.Configuration命名空间.
6.多路异常捕获
注意,顶级异常放在最后,次级异常放在前面
7:实体类和dataSet的优劣
实体类与DataSet相比有哪些优势?
解析:DataSet可以看成是客户端内存中的一个数据库,如果咱们用ds.Tables[0]定位到一张表后,要想获取某一行数据的某个列的值,那么
ds.Tables[0].Rows[0][“Name”]
02.因为大家都知道C#对对象这种数据处理起来比较方便,所以尽可能的通过一定的手段向面向对象靠拢。
使用实体的目的将数据库中的二维表转换成面向对象编程语言中的对象。
注意:实体只是用来在三层之间传递数据,它不属于任何一层。
8:readonly和const的区别
01.readonly只能作为类的变量存在,不能作为方法的变量存在。
02.readonly在运行的时候赋值,而const是在编译的时候系统就已经将值给了常量。
03.readonly可以修饰任何类型,而const只能声明值类型和特殊的引用类型string。
9:using关键字
1.using关键字的使用
释放资源
****用了using,还是需要try--catch的
****SQLHelper 我使用using的地方
****using的原理
为什么出了using所在的{},会自动回收对象。
原因是当我们将要出{},系统自动调用了Dispose()方法。
而在DISpose方法中是这么实现的
10:参数化防止SQL注入
1.会实现参数化SQL
1. 如果监控的count是-1,请检查方法是否正确
2. Da没有Parameters属性 ,但是可以通过一道转换,让他变成Command。
da.SelectCommand;
11:使用C#代码调用存储过程
12:MD5加密算法
string before = textBox1.Text; MD5 md = new MD5CryptoServiceProvider(); byte[] bytes = Encoding.Default.GetBytes(before); byte[] newbytes = md.ComputeHash(bytes); StringBuilder sb = new StringBuilder(); for (int i = 0; i < newbytes.Length; i++) { sb.Append(newbytes[i].ToString("X2")); } textBox2.Text = sb.ToString();
案例:1经过MD5加密后c4ca4238a0b923820dcc509a6f75849b
02.MD5加密是不可逆的,只能加密不能解密
03.MD5加密一道,再用MD5,*3.14159265357 MD5
13:C#开启事务
string name = txtNum.Text; string str = "Data Source=.;Initial Catalog=MySchool;uid=sa"; SqlConnection con = new SqlConnection(str); string sql = "insert into grade values(@name)"; SqlCommand cmd = new SqlCommand(sql,con); SqlParameter para = new SqlParameter("@name",name); cmd.Parameters.Add(para); try { con.Open(); SqlTransaction tran = con.BeginTransaction(); cmd.Transaction = tran; int count = Convert.ToInt32(cmd.ExecuteNonQuery()); if (count > 0) { MessageBox.Show("OK"); txtNum.Text = ""; tran.Commit(); } else { MessageBox.Show("NO"); tran.Rollback(); } } catch (Exception) { throw; } finally { con.Close(); }
--现象;如果SQL语句用事务进行管理,
--在事务没有执行任何一个出口(Commit和RollBack)之前,
--如果用select来检索表中的数据,那么这个时候是检索不到的,
--因为在事务执行完成前,表是被锁定的,锁定的原因是为了避免用户
--看到脏数据
相关文章推荐
- Linux基础知识命令的使用格式
- 第三方框架--加载网络图片
- jquery.validate.js校验select2解决方案 Jquery插件select2校验解决方案
- ACM第三次练习—1017
- Android中InstanceState()使用详解
- mysql数据类型详解
- 【LeetCode】257. Binary Tree Paths 解题报告
- C++第13周项目 多态性 【项目4-立体类族共有的抽象类】
- struts2:This method: login for action user is not allowed!
- 快速排序里的学问:随机化快排
- Java千百问_06数据结构(021)_StringBuffer/StringBuilder有什么区别
- 为什么你有10年经验,但成不了专家?
- C++第13周项目 多态性 【项目3-形状类族的中的纯虚函数】
- assert的用法简介
- Java - PAT - 1014. 福尔摩斯的约会 (20)
- jsp ${param.id}用法
- Python 修改文件重命名代码
- 函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)
- 练习三 1021
- jsp base标签与meta标签学习小结