C#【E咖吧收费系统】七层登录

  根据标题我们就可以清楚地知道登录要经过七层,那么什么是七层?哪七层?每层是做什么的?层与层之间有什么关系?以及七层如何实现登录?下面小编将来解决这些问题。

【什么是七层】

  七层就是在三层的基础上与设计模式相结合演化而来,加入了外观模式(外观层)、抽象工厂模式加反射(工厂层)、接口层、实体层,其目的是为了降低各个层之间的耦合度。
在这里插入图片描述
【七层及作用】

显示层(UI):根据用户的具体需求,为每个功能模块,部署输入控件、操作控件和输出控件;收集用户输入的数据然后传给外观层。

外观层(Facade):增加外观可以提供一个简单的接口,减少层与层之间的依赖,进而使得耦合度大大降低。

业务逻辑层(BLL):进行逻辑判断和处理;调用工厂中的方法创建相应的接口

工厂层(Factroy):定义一个接口调用接口层,实现BLL层和DAL层之间的数据传递;抽象工厂+反射+配置文件,作用是灵活的实现数据库的连接,方便更换数据库,进一步解耦合

接口层(IDAL):定义一个统一的接口,解除B层和D层的耦合

数据访问层(DAL):数据访问层,提供数据访问的方法,不储存逻辑。在接口中对数据库操作语句进行组合装配。数据访问层是数据库的管理者,但不是访问者,不直接与数据库发生关联。数据库中每个表都对应一个数据访问层的 (访问控制)类。在数据访问层中有SQLHelper类,专用于存放公用的访问数据库方法以让其他访问控制类调用,实现代码复用。数据访问层只与接口层(IDAL)、实体类(Entity)有关联关系。

实体层(Entity):存放全局的实体类,相当于加强的数据结构,实现了对数据的封装。数据库中每个表都对应一个实体类,表的字段就是实体类的属性,类型一一对应。UI、BLL、DLL三层的交互主要就是通过实体类作为参数,并返回信息。实体类不与任何层发生关联关系。

SQLHelper:将D层中重复使用的连接数据库代码抽象到一个层里

Common:MD5加密(可以忽略)

【层与层之间的关系】

UI→DAL、Entity、Facade

Facade→BLL、Entity

BLL→Entity、Factory、IDAL

Factory→IDAL

IDAL→Entity

DAL→Entity、IDAL

【登录】

UI

        private void btnOk_Click(object sender, EventArgs e)
        {
            string name = txtName.Text;
            string pwd = txtPwd.Text;

            UserFacade userFacade=new UserFacade();
            LoginState loginState = userFacade.Login(name, pwd);
            switch (loginState)
            {
                case LoginState.Ok:
                    FormMain main = new FormMain();
                    main.Show();
                    this.Hide();
                    break;
                case LoginState.NameError:
                    MessageBox.Show("用户名错误,请重新输入");
                    break;
                case LoginState.PwdError:
                    MessageBox.Show("密码错误,请重新输入");
                    break;
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }

Facade

    public partial class UserFacade
    {
        private UserBll userBll;

        public UserFacade()
        {
            userBll=new UserBll();
        }

        public List<UserInfo> GetList()
        {
            return userBll.GetList();
        }
        public LoginState Login(string name, string pwd, out int type)
        {
            return userBll.Login(name, pwd);
        }
    }

BLL

    public partial class UserBll
    {
        private UserIDal userIDal;

        public UserBll()
        {
            userIDal = DataAccess.CreateUser();
        }

        public List<UserInfo> GetList()
        {
            return userIDal.GetList();
        }
        public LoginState Login(string name, string pwd)
        {
            UserInfo mi = userIDal.GetByName(name);
            if (mi == null)
            {
                return LoginState.NameError;
            }
            else
            {
                if (mi.MPwd.Equals(pwd))//(Md5Helper.EncryptString(pwd)))
                {
                    return LoginState.Ok;
                }
                else
                {
                    return LoginState.PwdError;
                }
            }
        }
    }

Factory

    public partial  class DataAccess
    {
        private static readonly string AssemblyName = ConfigurationManager.AppSettings["DB"];
        public static UserIDal CreateUser()
        {
            string className = AssemblyName + "." + "UserDal";
            return (IDAL.UserIDal)Assembly.Load(AssemblyName).CreateInstance(className);
        }
    }

IDAL

    public partial interface UserIDal
    {
        List<UserInfo> GetList();
        UserInfo GetByName(string name);
    }

DAL

   public partial class UserDal:UserIDal
    {
        public List<UserInfo> GetList()
        {
            string sql = "select * from [User]";
            DataTable dt = SqlHelper.GetDataTable(sql);
            List<UserInfo> list = new List<UserInfo>();
            foreach (DataRow row in dt.Rows)
            {
                list.Add(new UserInfo()
                {
                    MId = Convert.ToInt32(row["mid"]),
                    MName = row["mname"].ToString(),
                    MPwd = row["mpwd"].ToString(),
                    MType = Convert.ToInt32(row["mtype"])
                });
            }
            return list;
        }
        
        public UserInfo GetByName(string name)
        {
            UserInfo mi = null;
            string sql = "select * from [User] where mname=@name";
            SqlParameter p = new SqlParameter("@name", name);
            DataTable dt = SqlHelper.GetDataTable(sql, p);
            if (dt.Rows.Count > 0)
            {
                mi = new UserInfo()
                {
                    MId = Convert.ToInt32(dt.Rows[0][0]),
                    MName = name,
                    MPwd = dt.Rows[0][2].ToString(),
                    MType = Convert.ToInt32(dt.Rows[0][3])
                };
            }
            else
            {
            }

            return mi;
        }
    }
   public static class SqlHelper
    {
        private static string connStr =ConfigurationManager.AppSettings["ConnStr"];
        public static int ExecuteNonQuery(string sql, params SqlParameter[] ps)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.Parameters.AddRange(ps);
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
        }

        public static object ExecuteScalar(string sql, params SqlParameter[] ps)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlCommand cmd=new SqlCommand(sql,conn);
                cmd.Parameters.AddRange(ps);

                conn.Open();
                return cmd.ExecuteScalar();
            }
        }

        public static DataTable GetDataTable(string sql, params SqlParameter[] ps)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                SqlDataAdapter adapter=new SqlDataAdapter(sql,conn);
                DataTable dt=new DataTable();
                adapter.SelectCommand.Parameters.AddRange(ps);
                adapter.Fill(dt);
                return dt;
            }
        }
    }

Entity

    public partial class UserInfo
    {
        public int MId { get; set; }
        public string MName { get; set; }
        public string MPwd { get; set; }
        public int MType { get; set; }
    }
    public enum LoginState
    {
        Ok,
        NameError,
        PwdError
    }

配置文件

  <appSettings>
    <add key="DB" value="DAL" />
    <add key="ConnStr"  value="Server=JJ;Database=ChongGou;User ID=sa;PassWord=123;" />
  </appSettings>
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值