机房重构 — 七层登录

  在前面介绍了三层,UI层; BLL层; DAL层

  这次总结下“七层”。 在还没有学习七层的时候,那时候只是认为“七层”只是比三层多了四层而已,其实不然,七层它也是机房重构的登录部分。

一. 为什么要有七层(七层的作用)?

  其实在学习“机房重构的时候”,包括在写任何程序的时候,没有任何要求说必须使用七层架构,所以说,这就有了我们为什么要用“七层架构”,和使用它的好处。

   学过设计模式的小伙伴都知道,设计模式是为了让代码更加的规范,给代码制定好一个个模式和规则,告诉你写代码的规范和套路,怎样写代码更能提高效率,较少冗余和错误... 同理,“七层”的作用和设计模式大致相似,在软件工程的学习后,我们有了一种“高内聚,低耦合,较少代码冗余和错误,提高程序的效率”等等...

二. 各层作用及功能:

 

1. 实体层:

  对字段和数据进行封装,是一种实体类,以供其他层调用。

显示给用户内容,与用户进行交互,;为用户提供可操作的功能的实现;为了数据库收集用户的各种信息;

(不包含任何业务相关的逻辑处理)。

namespace Entity   //实体层
{
    public class UserInfo
    {
        //ID字段
        private int userID;
        public int UserID
        {
            get { return userID; }
            set { userID = value; }
        }
        //用户名字段
        private string userName;
        public string UerName
        {
            get { return userName; }
            set { userName = value; }
        }
        //密码字段
        private string password;


        public string Password
        {
            get { return password; }
            set { password = value; }
        }
        //等级
        private string level;
        public string Level
        {
            get { return level; }
            set { level = value; }
        }
        //状态字段
        private bool stat;
        public bool Stat
        {
            get { return stat; }
            set { stat = value; }
        }

    }

 

2.  IDAL层

IDAL层就是定义一个统一通用的接口层,用来接触B层,D层之间的耦合

//登录
    public interface IUserIDAL
    {
        //判断用户名是否在表中存在。
        DataTable SelectUser(Entity.UserInfo UserInfo);
    }

 

3. DAL层

D层的作用就是来访问数据库中的相应的数据,来进行增删改查等操作。

(1)从数据源加载数据(Select)

(2)向数据源写入数据(Insert / Update)

(3)从数据源删除数据(Delete)

public class DAL : IDAL.IUserIDAL 
    {
        public DataTable SelectUser(Entity.UserInfo UserInfo)
        {
            //实例化一个SQLHeIepr防止注入
            SQLHeIper sqlHeIper = new SQLHeIper();      

            //定义需要传递的参数         
            SqlParameter[] sqlparams = { new SqlParameter("@UserID", UserInfo.UserID), new SqlParameter("@Password", UserInfo.Password) };
            //构造语句,匹配数据表
            string sql = @"SELECT * FROM User_info WHERE UserID=@UserID and PWD=@Password ";

            DataTable table = sqlHeIper.ExecuteNonQuery(sql,sqlparams,CommandType.Text);

            return table;
            
        }    

    }

 

4.Factory工厂层

就是(简单工厂模式)它的功能是创建接口对象,是B层与IDAL层之间的桥梁,解耦的功能;在这里运用到了:

工厂+反射+配置文件。

namespace Factory   //工厂层   
{
    public class UFactory
    {
        //接受来自配置文件的数据
        string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
        private string ClassName;

        public IUserIDAL CreateUserInfo()
        {
            //DAL层的类名:
            string ClassName = StrDB + "."+"DAL";
            return (IDAL.IUserIDAL)Assembly.Load(StrDB).CreateInstance(ClassName);
        }

    }
}

 

5.BLL业务逻辑层

  看B层的名字“业务逻辑层”,可以想象成一个到处跑业务的人,是整个系统的核心,承担了所有的业务的判断,能上蹿下跳,对数据业务逻辑进行处理,加以判断。

public partial class LoginBLL
    {
        public Boolean UserBLL(Entity.UserInfo UserInfo)
        {
            //实例化工厂层
            Factory.UFactory GongC = new Factory.UFactory();
            //调用工厂方法并且创建接口
            IDAL.IUserIDAL Idal = GongC.CreateUserInfo();
            //接收D层的返回值
            DataTable table = Idal.SelectUser(UserInfo);
            bool flag;
            //返回的Data Table类型,如果它的行数等于0,说明没有符合该账号密码的账户。
            if (table.Rows.Count == 0)
            {
                { flag = false; }
            }
            else
            {
                { flag = true; }
            }
            return flag;

        }
        //密码是否
        public DataTable GcBLL(Entity.UserInfo UserInfo)
        {
            Factory.UFactory GongC = new Factory.UFactory();   //GongC工厂
            //调用工厂方法并且创建接口
            IDAL.IUserIDAL Idal = GongC.CreateUserInfo();
            //接收D层的返回值
            DataTable GcPWD = Idal.SelectUser(UserInfo);
            return GcPWD;
        }

    }

 

6.Facade外观层

  用到了外观模式,使复杂问题能够简单化,降低层之间的耦合;用外观定义统一的接口,以供UI层调用。

 public class UFacade
    {
        public Boolean SelectUser(Entity.UserInfo user)
        {
            bool flag;
            //实例化B层
            LoginBLL uBLL = new LoginBLL();  
            flag = uBLL.UserBLL(user);
            //返回一个布尔值
            return flag;

        }
        
    }

 

7..UI层:

显示给用户内容,与用户进行交互,;为用户提供可操作的功能的实现;为了数据库收集用户的各种信息;

(不包含任何业务相关的逻辑处理)。

    public partial class LoginUI : Form
    {
        public LoginUI()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void ButOk_Click(object sender, EventArgs e)
        {
            //判断账户输入不能为空!
            if(txtUserID.Text.Trim()=="")
            {                                                    
            //MessageBoxIcon.Warning显示一个警告图标
                MessageBox.Show("请您输入账号", "提示", MessageBoxButtons.OK, 
                MessageBoxIcon.Warning);
            }
            if (txtPassword.Text.Trim()=="")
            {
                MessageBox.Show("请输入密码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
 
            
                //实例化登录,然后再传给外观层
                Facade.UFacade Facade = new Facade.UFacade();
                Entity.UserInfo user = new Entity.UserInfo();
                user.UserID = Convert.ToInt32(txtUserID.Text.Trim());
                user.Password = txtPassword.Text.Trim();

                //实例化外观层
                Boolean flag = false;
                Facade.UFacade facade = new Facade.UFacade();

                //调用外观的方法,返回给User
                flag = Facade.SelectUser(user);   //调用外观的方法,返回给user.

                if (flag != false)
                {
                    this.Hide();   //登录成功后隐藏本窗体        
                    this.DialogResult = System.Windows.Forms.DialogResult.OK;

                    MessageBox.Show("登录成功!进来吧小机灵鬼");
                    //登录成功后显示主窗体

                    //判断用户登录等级
                    
                    frmOperator frmMain = new frmOperator();   
                    frmMain.Show();
                    
                }
                else
                {
                    MessageBox.Show("自己密码,账号都不记得了?");
                    txtPassword.Text = "";
                    txtPassword.Focus();
                    txtUserID.Select();
                    txtUserID.Focus();

                }

你可能感兴趣的:(机房重构)