机房重构:七层登录代码总结

本文通过实战案例详细解析了七层架构的设计与实现过程,包括UI层、BLL层、DAL层等各层的具体功能及相互间的交互方式。

前言:

相信大家都进行到了七层这一阶段,但是这个七层可是很折磨人的呐!不过还好,经过千辛万苦我终于战胜了它。

附上逻辑总结:逻辑总结博客地址

UI层

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

namespace UI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnOK_Click_1(object sender, EventArgs e)
        {
            string UserName = txtUserID.Text.Trim();
            string Password = txtUserPWD.Text;

            //验证是否为空    
            if (txtUserID.Text == string.Empty)
            {
                MessageBox.Show("请输入账号!", "登录");
                return;
            }
            else
            {
                if (txtUserPWD.Text == string.Empty)
                {
                    MessageBox.Show("请输入密码!", "登录");
                    return;
                }

                //#region 登录    
                try
                {
                    Facade.LoginFacade fLogin = new Facade.LoginFacade();//实例化外观    
                    Entity.UserInfo user = new Entity.UserInfo();
                    //调用外观的方法,返回给user    
                    user.UserName = Convert.ToString(txtUserID.Text.Trim());
                    user.Password = Convert.ToString(txtUserPWD.Text);

                    Boolean flag = false;
                    flag = fLogin.SelectUser(user);

                    if (flag != false)
                    {
                        MessageBox.Show("登录成功!");
                    }
                    else
                    {
                        MessageBox.Show("用户名密码或者错误");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }
}
BLL层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Data; 

namespace BLL
{
   public class LoginBLL
    {
       public bool UserBLL(Entity.UserInfo UserInfo)
       {
           Factory.LoginFactory fact = new Factory.LoginFactory();//实例化工厂    
           IDAL.LoginIDAL idal = fact.CreateUser();//调用工厂方法创建接口    
           DataTable table = idal.selectUser(UserInfo);//接受D层的返回值   

           Boolean flag;
           if (table.Rows.Count == 0)
           {
               flag = false;
           }
           else
           {
               flag = true;
           }
           return flag;
       }  
    }
}
DAL层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using SqlHelper;

namespace DAL
{
    public class LoginDAL : IDAL.LoginIDAL
    {
        public DataTable selectUser(Entity.UserInfo UserInfo)
        {
            CommandType Text = 0;
            sqlHelper sqlhelper = new SqlHelper.sqlHelper();
            SqlParameter[] sqlParams = { new SqlParameter("@UserName", UserInfo.UserName), new SqlParameter("@PassWord", UserInfo.Password) };
            string sql = @"select*from User_Info where userID=@UserName and PWD=@PassWord";
            DataTable table = sqlhelper.ExecuteNonQuery(sql, Text, sqlParams);
            return table;
        }
    }  
}

IDAL层
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;

namespace IDAL
{
    public interface LoginIDAL
    {
        DataTable selectUser(Entity.UserInfo UserInfo);
    }
}
Factory层

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Reflection;
using System.IO;

 

namespace Factory
{
    public class LoginFactory
    {
        string AssemblyName = "DAL";
        //数据程序集名称,命名空间(DAL)  
        string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
        //接受来自配置文件的数据    
        public IDAL.LoginIDAL CreateUser()
        {
            string className = AssemblyName + "." + "LoginDAL";//DAL层的类名   
            IDAL.LoginIDAL idal = (IDAL.LoginIDAL)Assembly.Load(StrDB).CreateInstance(className);//反射加工厂的应用  
            return idal;
        }  
    }
}

Facade层

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


namespace Facade
{
   public class LoginFacade
    {
       public Boolean SelectUser(Entity.UserInfo UserInfo)
       {
           bool flag;
           BLL.LoginBLL userBLL = new BLL.LoginBLL();
           flag = userBLL.UserBLL(UserInfo);
           return flag;
       }  
    }
}
SQLHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Reflection; 

namespace SqlHelper
{
    public class sqlHelper
    {
        public DataTable ExecuteNonQuery(string cmdTxt, CommandType cmdType, SqlParameter[] paras)
        {
            string StrDB = System.Configuration.ConfigurationManager.AppSettings["ConnStr"];

            //接收来自配置文件的数据    
            SqlConnection conn = new SqlConnection(StrDB);
            //创建数据库的连接    
            SqlCommand cmd = default(SqlCommand);
            //定义命名变量    
            DataSet adataset = null;
            //定义数据适配器,DataSet类表示一个存放在内存中的数据缓存    
            SqlDataAdapter adapter = default(SqlDataAdapter);
            //sqldataadapter类目的是填充dataset    
            cmd = new SqlCommand(cmdTxt, conn);
            //在conn上面执行实例化命令变量,并执行语句cmdtype    
            cmd.CommandType = cmdType;
            //命令执行类型    
            cmd.Parameters.AddRange(paras);
            //命令执行的参数    
            adapter = new SqlDataAdapter(cmd);
            //初始化sqldataadapter类的新实例,用指定的cmd作为selectcommand的属性    
            adataset = new DataSet();
            try
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                adapter.Fill(adataset);
                //向adapter对象中填充查询的数据    
            }
            catch (Exception ex)
            {
                //Interaction.Msgbox(ex.Message);    
                //MessageBox.Show(ex.Message);  

            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
            return adataset.Tables[0];
            //获取包含在dataset中的表的集合    
        }
        public string ConnStr { get; set; }  
    }
}
反射+配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <appSettings>
    <add key ="ConnStr" value="server=BRYANT; database=Login7;User ID = sa ; Password=123"/>
    <add key ="DB" value="DAL" />
  </appSettings>
</configuration>

小结:七层是这个阶段最重要的知识点,理解了七层有助于后面的机房合作。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Adam`南帝·梁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值