zoukankan      html  css  js  c++  java
  • 初识三层,请多指教

    用三层写登录
    首先搭建三层:Model、DAL、BLL、UI层(Model是个实体,不属于三层中的一项)
    各层是什么意思就不说了,大家应该都知道。在Model里主要是建立表对应的实体模型,各个属性其实就是表中的各个字段;在DAL层就是对数据库进行访问的操作层,比如用户登录这一操作,需要根据输入的用户名查询数据库判断此用户是否存在;BLL层主要起到隔离UI层与数据访问曾层,也就是通常说的使得表现与行为分离;UI层就是根据从BLL层返回的数据进行相应的显示。
    为了简洁,用户表User:FName、FPwd就设两个字段
    首先在Model层中建立User表对应的实体类
    public class User
    {
     private string fName;

            public string FName
            {
                get { return fName; }
                set { fName = value; }
            }
            private string Pwd;

            public string Pwd1
            {
                get { return Pwd; }
                set { Pwd = value; }
            }
    }
    DAL层首先根据传入的用户名来查找此人是否存在,然后将结果返回给BLL,BLL在将处理后的结果返回给UI,此时要考虑DAL查询出来的是一张二维的数据表,如果直接将表结构的数据返回,那么在调用层还要对表进行处理才能判断登录用户是否存在,而且表中的数据类型复杂,表现层需要对取得的数据进行类型转换,转换失败就会初一意想不到的异常,非常的麻烦。因此在DAL层检索到数据之后我们要返回的类型可以定义为User类型,就是在Model里定义的类型(如果登录用户存在,将该用户在表中的那一行信息转换为一个User对象)
     public User GetuserByUserName(string userName)
            {
                string sql = "select * from User where FName=@name";
                SqlParameter[] paras={
                    new SqlParameter("@name",userName)
                };
                Person user = null;
     //调用SqlHelper中的GetTable方法
                DataTable dt = SqlHelper.GetTable(sql, paras);
                if (dt.Rows.Count > 0)
                {
                    DataRow dr = dt.Rows[0];
     //RowToUser方法是个关键,用来将表中的一行数据转换成User类的一个实体对象
       user = RowToUser(dr);
                }
                return user;
            }

      //把行转化为对象
            private User RowToUser(DataRow dr)
            {
                User user = new User ();
     //如果字段的指设置为可以为空,那么在转换的时候需要使用DBNull.Value判断该列的值是否为空,如果为空还进行强制转换会引发类型匹配的异常
     //当表中类型为varchar(对应C#为String的类型)可以不用判断,因为ToString之后如果为空会返回“”(空字符串),不会引发异常
                if (dr["FName"] != DBNull.Value)
                {
                    per.FName= Convert.ToString(dr["FName"]);
                }
                per.FPwd = Convert.ToDateTime(dr["FPwd "]);
        return user;
     }
    此时DAL层返回的对象类型为User,在BLL层只需要对接收到的数据进行逻辑处理即可
      public User Login(string userName)
            {
                return DAL.UserDAL dal = new UserDAL();
            }
    之后返回到UI层的就是一个选择问题(返回的User是否为null),是就表示此用户存在,此刻因为数据类型都已经在Model里定义并在DAL里进行好了对应的转换,在进行密码是否正确的验证的时候,只需要获得user对象,调用user.FPwd即可与输入的密码进行比较

    备注:该案例中只是为了表现调用user.FPwd有多爽才将密码的验证放到UI层,在BLL层验证所有的数据只返回给UI一个干净利落的结果是最好的做法

  • 相关阅读:
    带你看懂MySQL执行计划
    MySQL rename table方法大全
    MySQL慢日志全解析
    mybatis-通用mapper
    springboot-数据访问
    docker-1常用命令
    springboot-错误处理
    springboot-配置1
    react--temp
    了解react记录2-生命周期
  • 原文地址:https://www.cnblogs.com/luseike/p/2697960.html
Copyright © 2011-2022 走看看