从三层到七层的变化 使得我都不知道从哪里下手了,其中增加了一个外观层(Facade)和一个工厂层(Factory)另外还有了一个接口。而这些层与层之间 都有自己的职能。但是总的核心就是:“解耦”。 开始机房重构有一段时间了,现在回想一下自己当时敲登陆窗体的时候遇到了各种各样的问题,例如代码的逻辑走不通,不知道该什么时候调用 一系列问题。 1、创建Entity,实现业务实体。 代码实现 Entity IDAL层 DAL层 SQLHelper App BLL 实现步骤:
2、创建IDAL,实现接口。
3、创建DAL,实现接口里的方法。
4、增加APP.config里的配置信息,为提供DAL的程序集。
5、创建Factory,返回程序集的指定类的实例。
6、创建BLL,调用Factory,得到程序集指定类的实例,完成数据操作方法。
7、创建Facade,调用BLL,得到BLL层的处理结果返回值。
8、创建UI,调用Facade里的数据操作方法,实现登录。
public class UserInfo { //定义 用户ID 字段 private string userid; public string UserID { get { return userid; } set { userid = value; } } //定义 密码 字段 private string password; public string Password { get { return password; } set { password = value; } } }
namespace IDAL { public interface LoginIDAL { DataTable selectUser(Entity.UserInfo UserInfo); } }
public class LoginDAL : IDAL.LoginIDAL { public DataTable selectUser(Entity.UserInfo UserInfo) //selectUser该方法即是IDAL接口的方法 { SQLHelper SQLHelper = new SQLHelper(); //实例化 跳转到SQLHelper层 //声明一个SQL参数的数组 params可变数组 SqlParameter[] sqlParams = { new SqlParameter("@txtUserID", UserInfo.UserID), new SqlParameter("@txtPWD", UserInfo.Password) }; //用户名和密码 string sql = @"SELECT * FROM User_Info WHERE UserID=@txtUserID and PWD=@txtPWD"; //查的语句用户名和密码相等并且状态为 True and state = 'True' DataTable table = SQLHelper.ExecuteQuery(sql, sqlParams, CommandType.Text); return table; } }
public class SQLHelper { #region 构造函数 private SqlConnection conn = null; //SqlConnection 打开连接 private SqlCommand cmd = null; //SqlCommand对象允许你指定在数据库上执行的操作的类型。比如,你能够对数据库中的行数据执行select,insert,modify以及delete命令。 //SqlCommand对象能被用来支持断开连接数据管理的情况,可以只单独使用SqlCommand对象。也可以与SqlDataAdapter一起实现断开数据连接,实现操作数据库的应用程序 private SqlDataReader sdr = null; //读取只进的行流的方式 public SQLHelper() { string connStr = ConfigurationManager.AppSettings["connStr"]; //ConnStr 是配置文件里连接数据库的关键字,引用这一句可以连接数据库 conn = new SqlConnection(connStr); //实例化一个连接 } #endregion #region SQL连接打开 private SqlConnection GetConn() { if (conn.State == ConnectionState.Closed) //如果连接状态为关闭 { conn.Open(); //则打开 } return conn; } #endregion #region 非存储过程 /// <summary> /// 执行不带参数的的 增删改 SQL语句或者存储过程 /// </summary> /// <param name="cmdText">增删改SQL</param> /// <param name="ct">命令类型</param> /// <returns>返回受影响的行数</returns> public int ExecuteNonQuery(string cmdText, CommandType ct) //增删改 SQL 命令类型 { int res; try { cmd = new SqlCommand(cmdText, GetConn()); //打开连接 cmd.CommandType = ct; res = cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); //关闭数据库 与上面相对应 } } return res; } /// <summary> /// 执行带参数的的 增删改 SQL语句或者存储过程 /// </summary> /// <param name="cmdText">增删改SQL</param> /// <param name="paras">要查询的参数</param> /// <param name="ct">命令类型</param> /// <returns>返回受影响的行数</returns> public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) { int res; using (cmd = new SqlCommand(cmdText, GetConn())) //使用using,可以自动关闭数据库 { cmd.CommandType = ct; cmd.Parameters.AddRange(paras); res = cmd.ExecuteNonQuery(); } return res; } /// <summary> /// 执行不带参数的 查询 SQL语句或存储过程 /// </summary> /// <param name="cmdText">查询SQL语句或存储过程</param> /// <param name="ct">命令类型</param> /// <returns></returns> public DataTable ExecuteQuery(string cmdText, CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } return dt; } /// <summary> /// 执行带参数的 查询 SQL语句或存储过程 /// </summary> /// <param name="cmdText">查询SQL语句或存储过程</param> /// <param name="paras">参数集合</param> /// <param name="ct">命令类型</param> /// <returns></returns> public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; cmd.Parameters.AddRange(paras); using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } return dt; } #endregion }
<appSettings> <add key="ConnStr" value="server=TZK;database=jifang;uid=sa;pwd=123456"/> <add key="DB" value="DAL"/> <!--ConnStr 为 连接数据库 key为键值,引用字符DB,value代表引用的真正的内容--> </appSettings>
Factory
public class LoginFactory { string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"]; //接收来自配置文件的数据 public IDAL.LoginIDAL CreateUser() { string ClassName = StrDB + "." + "LoginDAL"; //这里的LoginDAL是D层的类名 return (IDAL.LoginIDAL)Assembly.Load(StrDB).CreateInstance(ClassName); //反射加工厂的应用 } }
public class LoginBLL { public bool UserBLL(Entity.UserInfo UserInfo) { Factory.LoginFactory fact = new Factory.LoginFactory(); //实例化工厂 跳转到Factory层 接收配置文件的数据,接收完成之后再回来 IDAL.LoginIDAL idal = fact.CreateUser(); //调用工厂方法创建接口 跳转Factory 使用CreateUser的方法 DataTable table = idal.selectUser(UserInfo); //接收D层的返回值 跳转到DAL层 bool flag; if (table.Rows.Count == 0) //返回DataTable类型,如果他的行数等于0,说明没有符合该账号密码的用户 { flag = false; } else { flag = true; } return flag; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算