C# 重构机房收费系统——入门必看 !指导思想篇

如何入手机房重构


sqlHelper连接数据库

  • 什么是 sqlHelper(数据库助手类)
    SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了
  • 怎么写sqlHelper
    sqlHelper作为连接数据库的核心功能类代码 肯定是要写在DAL层的
public class sqlHelper
    {
    
            //从配置文件中读取连接字符串
            private static readonly string connStr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
            //ExecuteNonQuery(); //执行命令的方法: insert update delete
            //返回值类型为int型。多用于执行增加,删除,修改数据,返回受影响的行数。当select操作时,返回-1.
            //ExecuteNonQuery()方法主要用户更新数据,通常它使用Updae,Insert,Delete语句来操作数据库,
            //其方法返回值意义;对于Update,Insert,Delete 语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,
            //params是关键字:是可变参数的意思,目的是省略手动构造数组的过程,直接指定对象编译器会帮助我们构造数组,并将对象加入数组中传递过来
            public static int ExcuteNonQuery(string sql, params SqlParameter[] pms)
            {
    
    
                using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
                {
    
    
                    SqlCommand cmd = new SqlCommand(sql, conn);//创建command连接对象
                    cmd.Parameters.AddRange(pms);
                    conn.Open();//打开链接
                    int n = cmd.ExecuteNonQuery();//执行命令并返回受影响的行数
                    cmd.Parameters.Clear();
                    return n;
                }
            }
            //Executescaler(); 获取首行首列的方法
            //它的返回值类型多为int类型。它返回的多为执行select查询。得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。
            //ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语句后的返回值与ExecuteNonQuery()并不相同,
            //ExecuteScalar()方法的返回值的数据类型是Object类型。
            //如果执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,
            //如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示,
            public static object ExecuteScalar(string sql, params SqlParameter[] pms)
            {
    
    
                using (SqlConnection conn = new SqlConnection(connStr))//创建链接对象
                {
    
    
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    cmd.Parameters.AddRange(pms); //添加参数
                    conn.Open();//打开链接
                    object o = cmd.ExecuteScalar();//执行命令,获取查询结构中的首行首列的值
                    cmd.Parameters.Clear();
                    return o;
                }
            }
            //获取结果结果集
            public static DataTable GetDataTable(string sql, params SqlParameter[] pms)
            {
    
    
                using (SqlConnection conn = new SqlConnection(connStr))//创建链接对象
                {
    
    
                    SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);//创建适配器对象
                    DataTable dt = new DataTable();//构造数据表用于接受查询结果
                    adapter.SelectCommand.Parameters.AddRange(pms);//添加参数
                    adapter.Fill(dt);//执行结果,fill方法内部自动打开链接,不需要Conn。open();
                    adapter.SelectCommand.Parameters.Clear();//清空集合
                    return dt;//返回结果集
                }
            }
        }
  • 如何用sqlHelper
    这段代码重点在于注释!注释标明了方法的适用类型 返回类型 返回值意义 例如
    在这里插入图片描述
    就清晰的解释了ExcuteNonQuery的使用方法 这是我们在选择语句的重要依据

七层的概念

  • U B D 三层的扩展
    七层是在三层原有的基础上为了方便代码阅读、解耦合、更符合面向对象的思想、更符合代码设计的要求而出现的
    例如:
    一、项目名称及描述:(实现步骤为:4-1-3-5-2-7-5-6-1)
    1、UI=表示层
    2、BLL=业务逻辑层
    3、IBLL=业务逻辑接口层定义
    4、Model=业务实体
    5、Factory=抽象工厂(创建反射)
    6、DAL = 数据层
    7、IDAL = 数据接口层定义

二、项目引用关系
1、UI 引用 IBLL、Model
2、BLL 引用 IDAL,Model,使用DALFactory创建实例,实现接口方法。
3、IDAL/IBLL 引用 Model。
4、Model 无引用。
5、DALFactory 引用IDAL,返回给BLL使用。
6、DAL 引用 Model和IDAL,实现接口里的方法。
三、实现步骤
1、创建Model,实现业务实体。
2、根据需要的返回值类型和传入的参数创建IBLL。
3、运用抽象工厂加反射+配置文件BLL实现接口
4、D层同样过程
5、U层传入参数,接收D层返回给B层的值,经过逻辑加工返回结果给UI层

注意:
1、一定要添加引用,不然各层之间不能进行联通
2、遇到错误,一定断点调试,看传入值的走向和代码书写的正确性
3、逻辑一定要是通的 最好先画好流程图
4、注意修改解决方案里的项目依赖。
5、注意在解决方案里增加各项目引用。

解耦思想

  • 什么是耦合
    一个好的软件工程一定是高内聚低耦合的
    但是什么是耦合呢?
    通俗来讲就是类模块一依赖于类模块二,当我们有需求需要改动类模块二的时候,类模块一就也需要跟着更改
  • 怎么解耦合
    接口的引入就是一种很好的解耦合方法 当然还有设计模式 方法类的封装,但是都基于接口的应用

接口的使用

  • 什么是接口?
    接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。
    接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。
    接口使得实现接口的类或结构在形式上保持一致。
    通俗来讲接口分为两部分:有什么 和 缺什么 例如:
 public interface IDeleteonlinestu
    {
    
    /// <summary>
    /// 删除上机表中的学生
    /// </summary>
    /// <param name="cardID">传入的值</param>
    /// <returns></returns>
        int deleteonlinestu(string cardID);
    }

这就是一个简单的接口代码 怎么解读呢?
在这里插入图片描述
括号中是我们有的东西 也就是需要传入的值
而“ int ” 是我们没有的 需要从实现类中接收的返回值类型

  • 实现类实现接口
    在这里插入图片描述

欢迎大家提出指导意见 共同进步

猜你喜欢

转载自blog.csdn.net/weixin_44693109/article/details/108702615