七层架构

简述


师傅给讲过反射+配置文件之后豁然开朗,对七层整体的架构了解又有了一个新的认识,今天开始机房七层登陆的,,嗯,算是重构吧,在之前的七层的基础上重新做一个新的认识。

实体层(Model)完成了,很简单,只有UserID和UserPwd

接口层IDAL)其次,简单的写出一个方法,在DAL层里面使用

DAL层,这个真的是了解了太多了,包括从开始的命名,反射就用在这里,为什么能换数据库,就是全都在命名上。

sqlhelper主要作用就是用来连接数据库进行一系列的操作

sqlchargeDAL和sqltestDAL两个分别是对不同数据库的调用

UI层,主要是将需要用到的东西实例化,添加配置文件,在这里配置文件要细说一下,这些东西敲好之后都会封装成为dll文件,要想换数据库的话,就是反射+抽象工厂+配置文件,还数据库的话就重新写一个配置文件,然后将配置文件换掉就好了,快捷方便。

外观层Facade)就是将UIDAL层的数据进行一个交互,就相当于一个中介的作用。目的是解耦,让UI和BLL层少一些耦合,UI的代码更加的清晰。

工厂层(Factory),这就是抽象工厂层,用上反射,搭配着配置文件来选择不同的DB

逻辑层(BLL),首先将外观层传进来的数据进行一个逻辑操作,然后交给DAL层操作,其次就是从DAL层传回来时还需要进行逻辑操作返回需要用到的值。


七层代码


实体层


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Model
{
    public class UserInfo
    {
        private string userid;
        private string userPwd;
        private string level;
        private string name;
        private string head;
        public string UserID
        {
            get { return userid; }
            set { userid = value; }
        }
        public string UserPwd
        {
            get { return userPwd; }
            set { userPwd = value; }
        }
        public string UserLevel
        {
            get { return level; }
            set { level = value; }
        }
        public string UserName
        {
            get { return name; }
            set { name = value; }
        }
        public string Head
        {
            get { return head; }
            set { head = value; }
        }
    }
}


UI层


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace LoginUI
{
    public partial class Form1 : Form
    {
        public static string level;
        public Form1()
        {
            InitializeComponent();
        }
        public void btnLogin_Click(object sender, EventArgs e)
        {
            //实例化用户
            Model.UserInfo user = new Model.UserInfo();
            user.UserID = txtUserID.Text.ToString();
            user.UserPwd = txtUserPwd.Text;


            //传入外观层
            LoginFacade.LoginFacade facade = new LoginFacade.LoginFacade();
            IList serveruser = facade.SelectUser(user);


            if (user.UserPwd != serveruser[0].UserPwd.ToString().Trim())
            {
                MessageBox.Show("登陆失败");
            }
            else
            {
                string level = serveruser[0].UserLevel.ToString().Trim();
                MessageBox.Show(level + " 登陆成功");
                this.Hide();
                //调用frmMain,把值传到frmMain中
                frmMain.frmMain fm = new frmMain.frmMain(level, user.UserID.ToString());
                fm.Show();
            }
        }
    }
}


Facade层


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LoginFacade
{
    public class LoginFacade
    {
        public IList SelectUser(Model.UserInfo userInfo)
        {
            LoginBLL.LoginBLL userBLL = new LoginBLL.LoginBLL();
            IList user = userBLL.UserBLL(userInfo);
            return user;
        }
    }
}


IDAL层


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace LoginIDAL
{
    public interface IDAL
    {
        IList selectUser(Model.UserInfo userInfo);
    }
}


DAL层


sqlhelper


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
using System.Windows.Forms;

namespace LoginDAL
{
    public class SqlHelper
    {
        private SqlConnection conn = null;
        private SqlCommand cmd = null;
        private SqlDataReader sdr = null;

        public SqlHelper()
        {
            string connStr = ConfigurationManager.AppSettings["ConnStr"];
            conn = new SqlConnection(connStr);
        }
        private SqlConnection GetConn()
        {
            if (conn.State == ConnectionState.Closed)
                conn.Open();
            return conn;
        }
        /// 
        /// 执行并且返回值为受影响行数的执行不带参数的sql语句或存储过程
        /// 
        /// sql语句
        /// 命令类型
        /// 返回受影响行数
        public int ExecuteNonQuery(string cmdText, CommandType ct)
        {
            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;
        }
        /// 
        /// 执行并且返回值为受影响行数的执行带参数的sql语句或存储过程
        /// 
        /// sql语句
        /// 需要查询的参数
        /// 命令类型
        /// 返回受影响的行数
        public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
        {
            int res;
            using (cmd = new SqlCommand(cmdText, GetConn()))
            {
                cmd.CommandType = ct;
                cmd.Parameters.AddRange(paras);
                res = cmd.ExecuteNonQuery();
                conn.Close();
            }
            return res;
        }
        /// 
        /// 执行并且返回值为Datatable的执行带参数的查询sql语句或存储过程
        /// 
        /// sql语句
        /// 命令类型
        /// 返回Datatable
        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;
        }
        /// 
        /// 执行并且返回值为Datatable的执行带参数的查询sql语句或存储过程
        /// 
        /// 查询SQL语句或存储过程
        /// 参数集合
        /// 命令类型
        /// 返回Datatable
        public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
        {
            DataTable dt = new DataTable();
            cmd = new SqlCommand(cmdText, GetConn());

            cmd.Parameters.AddRange(paras);
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(sdr);
            }
            return dt;
        }
    }
}


sqlnewchargeDAL


using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using Model;
using System.Data.SqlClient;

namespace LoginDAL
{
    class SqlnewchargeDAL : LoginIDAL.IDAL
    {
        //public DataTable selectUser(UserInfo userInfo)
        public IList selectUser(UserInfo userInfo)
        {
            SqlHelper sqlhelper = new SqlHelper();
            //SqlParameter[] sqlparams = { new SqlParameter("@userID", userInfo.UserID), new SqlParameter("@userPwd", userInfo.UserPwd) };
            SqlParameter[] sqlparams = { new SqlParameter("@userID", userInfo.UserID)};
            //string sql = @"SELECT * FROM [User_Info] WHERE UserID=@UserID and UserPwd=@UserPwd";
            string sql = @"SELECT * FROM [User_Info] WHERE UserID=@UserID";
            DataTable table = sqlhelper.ExecuteQuery(sql, sqlparams, CommandType.Text);
            IList user = LoginDAL.ConvertHelper.ConvertToModel(table);
            return user;
        }
    }
}


Factory


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Configuration;

namespace LoginFactory
{
    public class ServerFactory
    {
        string AssemblyName = "LoginDAL";
        string strDB = ConfigurationManager.AppSettings["DB"];
        public LoginIDAL.IDAL CreateUser()
        {
            string ClassName = AssemblyName + "." +strDB+ "DAL";
            return (LoginIDAL.IDAL)Assembly.Load(AssemblyName).CreateInstance(ClassName);
        }
    }
}


BLL层


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace LoginBLL
{
    public class LoginBLL
    {
        public IList UserBLL(Model.UserInfo userInfo)
        {
            LoginFactory.ServerFactory fact = new LoginFactory.ServerFactory();
            LoginIDAL.IDAL idal = fact.CreateUser();

            IList user = idal.selectUser(userInfo);
            //返回值为用户级别
            //string flag = null;
            //判断是有有此用户
            if (user.Count == 0)
            {
                user = null;
            }
            else
            {
                //flag = (user[0].UserPwd.Trim() == userInfo.UserPwd) ? "success" : "fail";
            }
            return user;
        }
    }
}




你可能感兴趣的:(七层架构)