C#深入.NET平台的软件系统分层开发
第一章 软件系统的分层开发
(1)其实分层模式可以这样定义:将解决方案中功能不同的模块分到不同的项目中实现,每一层中的组件应保持内聚性,每一层都应该与它下面的各层保持松耦合。
?????? 分层模式是最常见的一种架构模式,甚至可以说分层模式是很多架构模式的基础。
?????? 数据访问层:
???????? ?这一层处于最底层,负责与数据库的交互,也成为DAL(Data Access Layer)
?????? 表示层:
???????? 这一层直接与用户打交道,负责显示或者获取数据,也称为UI(User Interface Layer)
(2).NET程序集是任何.NET Framework应用程序的基本构造块。程序集由描述它的程序集清单(包含版本号,程序集名称等),类型元数据,MSIL代码和资源组成,
??????? 这些部分都分布在一个文件中。
??????? 程序集主要包括以下两类:
????????(1)可执行文件,即.exe文件?? (2)类库文件,即.dll文件
(3)程序集,解决方案,项目和命名空间的关系如下:
??????? (1)一个解决方案可以由一个或者多个项目组成,这些项目可以是Windows应用程序,类库等。
??????? (2)一个程序集可以包含多个命名空间,程序集默认的命名空间名称就是程序集的名称。
????????(3)命名空间是组织C#程序的一种逻辑架构,一个命名空间可以有多个类。
(4)分层开发的优点:
?????? (1)代码的复用(2)分离开发人员的关注(3)无损提换(4)降低了系统间的依赖
(5)异常处理
?? 常见的异常类型:
????? System.Exception :这个类提供系统异常和应用程序异常之间的区别
??????System.SQLException :当SQL Server返回警告或者错误时引发的异常
????? ArgumentNullException :当将空引用传递给不接受它作为有效参数的方法时引发的异常
????? FileNotFoundException :试图访问磁盘上不存在的文件失败时引发的异常
????? IOException :当出现I/O错误时,引发此异常
????? ApplicationException :在应用程序执行过程中检测到由应用程序定义的异常
? 异常类的常用属性:
???? Message :提供引起异常的详细信息
???? Source :表示导致异常发生的应用程序或者对象的名称
???? StackTrace :提供在栈堆上所调用方法的详细信息,并首先显示最近调用的方法
???? InnerException :对内部异常的引用,如果此异常基于前一个异常,则内部异常指最初发生的异常
(6)异常处理回顾
??? 语法:
???
try-catch try { //可能引发异常的工作代码 } catch(异常对象) { //异常处理 } try-finally try { //可能引发异常的工作代码 } finally { //清理相关对象的代码 } try-catch-finally try { //可能引发异常的工作代码 } catch(异常对象) { //异常处理 } finally { //清理相关对象的代码 }
上面的文字都是枯燥的,接下来用代码来演示一下:
/// <summary> /// 数据访问层 /// </summary> public class StudentDAL { public void AddStudent() { } public DataTable SelectStudent() { string str = "Data Source=.; initial catalog=MySchools;user id=sa;"; string sql = "select * from student "; SqlConnection con = new SqlConnection(str); SqlDataAdapter da = new SqlDataAdapter(sql,con); DataSet ds = new DataSet(); try { //int num = 0; //int result = 1 / num; da.Fill(ds, "stuInfo"); return ds.Tables["stuInfo"]; } catch (SqlException ex) { throw new Exception("访问数据库失败" + ex.Message); } catch (DivideByZeroException ex) { throw new Exception("除数不能为0" + ex.Message); } catch (Exception ex) { throw new Exception("失败" + ex.Message); } }
/// <summary> /// 数据访问层 /// </summary> public class GradeDAL { public DataTable SelectGrade() { string str = "data source=.; initial catalog=MySchools; user id=sa;"; string sql = "select * from Grade"; SqlConnection con = new SqlConnection(str); SqlDataAdapter da = new SqlDataAdapter(sql,con); DataSet ds = new DataSet(); da.Fill(ds,"gradeInfo"); return ds.Tables["gradeInfo"]; } }
private void Form1_Load(object sender, EventArgs e) { StudentDAL dal = new StudentDAL(); GradeDAL grade = new GradeDAL(); try { DataTable data = dal.SelectStudent(); DataTable table = grade.SelectGrade(); dgvList.DataSource = data; comboBox1.DataSource = grade.SelectGrade(); comboBox1.DisplayMember = "GradeName"; comboBox1.ValueMember = "GradeId"; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!