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);
            }
          

        }
相关推荐
csbysj202042 分钟前
如何使用 XML Schema
开发语言
R6bandito_1 小时前
STM32中printf的重定向详解
开发语言·经验分享·stm32·单片机·嵌入式硬件·mcu
earthzhang20211 小时前
【1007】计算(a+b)×c的值
c语言·开发语言·数据结构·算法·青少年编程
杨枝甘露小码1 小时前
Python学习之基础篇
开发语言·python
武文斌771 小时前
项目学习总结:LVGL图形参数动态变化、开发板的GDB调试、sqlite3移植、MQTT协议、心跳包
linux·开发语言·网络·arm开发·数据库·嵌入式硬件·学习
爱吃喵的鲤鱼2 小时前
仿mudou——Connection模块(连接管理)
linux·运维·服务器·开发语言·网络·c++
beyond谚语2 小时前
C#学习小笔记(完整版)—— Patience
c#
爱吃小胖橘2 小时前
Unity网络开发--超文本传输协议Http(1)
开发语言·网络·网络协议·http·c#·游戏引擎
郝学胜-神的一滴2 小时前
使用Linux的read和write系统函数操作文件
linux·服务器·开发语言·数据库·c++·程序人生·软件工程
小火柴1232 小时前
利用R语言绘制直方图
开发语言·r语言