文章目录
基于OOP原则优化ADO.NET
为什么要基于OOP原则优化ADO.NeT:
在程序中只要有哪个程序功能需要对数据库进行访问操作,那么必须要有之前学习的四个步骤:
(创建数据库连接对象-创建数据库命令对象-针对不同的命令执行结果是否选择使用另外两个对象对结果进行处理)
因此:决定使用面向对象的原则对数据库的访问操作功能进行单独提取
通用数据访问类
实现代码的复用
- 代码复用的基本形式:编写一个通用的方法
- 代码复用技术的要求:
- 原则:提取不变的,封装改变的
- 技巧:不变的作为“方法体”,变化的作为方法的“参数”。
DBHelper/SQLHelper类的封装
/// <summary>
/// 数据库访问操作类,该对象中提供了对数据库进行各种操作(增、删、改、查)的方法
/// </summary>
class SQLHelper
{
static string con = "Server=.;DataBase=InLettDB;UID=sa;Pwd=123;";
/// <summary>
/// 该方法可以对SQL语句执行完成之后返回结果为受影响行数的SQL语句进行命令执行(增加、删除、修改数据操作);
/// </summary>
/// <param name="sql">要执行的SQL语句</param>
/// <returns></returns>
public static int ExecuteNonQuery(string sql)
{
SqlConnection sqlCon = new SqlConnection(con);
SqlCommand cmd = new SqlCommand(sql, sqlCon);
sqlCon.Open();
int res = cmd.ExecuteNonQuery();
sqlCon.Close();
return res;
}
/// <summary>
/// 该方法可以对SQL语句执行完成之后返回结果中的首行首列数据,适用于SQL语句查询单一结果值
/// </summary>
/// <param name="sql">查询的SQL语句</param>
/// <returns></returns>
public static object ExecuteScalar(string sql)
{
SqlConnection sqlCon = new SqlConnection(con);
SqlCommand cmd = new SqlCommand(sql, sqlCon);
sqlCon.Open();
object res = cmd.ExecuteScalar();
sqlCon.Close();
return res;
}
}
面向对象的基本原则:
1. 单一职责原则(对象职责明确原则)
要求:一个对象只需要做好一件事情,必须专注,职责过多容易引起变化的原因就越多,程序就不稳定(高内聚,低耦合)
2. 开放封闭原则(核心原则)
要求:需要变化时尽量少的修改类的设计,而是通过扩展类来完成。即封闭修改,开放扩展
3. 依赖倒置原则(OOP精髓)
要求:基于接口编程,高层模块调用接口,底层模块实现接口,防止底层变化直接影响高层
4. 接口隔离原则
要求:尽可能多的使用专用的小接口,而不是总接口,避免接口过于复杂
5. 里氏替换原则
要求:在继承关系子类可以替换父类,虚拟机可以根据父类变量动态的找到具体的子类对象,从而实现子类
问题分析与解决
前后台代码混编的缺点
- 程序编写人员必须非常熟悉后台数据的设计
- 业务逻辑负责时很难查找错误,并且不利于后期的维护
- 不符合面向对象的设计思想->违反对象职责明确原则
解决方案 - 将数据展示代码和数据访问代码进行分离
- 根据当前需要访问的后台实体,创建一个对应的数据访问类
- 将该实体操作的方法封装到对应的数据访问类型
对象职责明确原则总结
原则
分离“界面代码”和“数据访问代码”
好处
5. 不管是什么类型的应用程序(Winform/WPF/WebForm/…)当界面法生变化的时候,数据访问部分一般不需要任何改变
6. 同时前台设计人员和后台编写人员可以很好的分离
注意
当写程序时,界面中不能出现任何SQL语句,数据访问后台代码中也不应该有其他的业务逻辑代码
扩展
对象职责明确原则对后续“三层架构”、“工厂模式”、“MVC模式”…打下基础