从三层到七层的变化   使得我都不知道从哪里下手了,其中增加了一个外观层(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网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
官方软件产品操作指南 (170)