.NET

C# WinForm项目三层架构简述

2017-10-18  本文已影响2154人  AiDede

基于C#.NET的WinForm项目,我们经常使用基于三层架构,来构建项目框架,这里简单的梳理一下三层架构的相关知识

哪三层?


我们通常所说的三层框架指的是DAL、BIL和UIL三层,分别是数据层、业务逻辑层和界面层,以及与之搭配的实体类和通用类库,下面分别概述

实体类- Model

namespace mtWeightModel
{
    [Serializable] //表示可以序列化
    public class User
    {
        public int Id { get; set; }
        public String username { get; set; }
        public String password { get; set; }
        public int status { get; set; }
    }
}

DAL-数据访问层 - DataAccessLayer

namespace mtWeightDAL
{
    /// <summary>
    /// 用户访问数据类
    /// </summary>
    public class UserService
    {
        /// <summary>
        /// 根据账号和密码比对用户信息
        /// </summary>
        /// <param name="objUser">包含用户名和密码的用户对象</param>
        /// <returns>返回用户对象信息(若无用户信息则对象为null)</returns>
        public User UserLogin(User objUser) {
            String sql = "SELECT Id,username,password,status FROM Users where username=@username and password=@password";
            SqlParameter[] param = new SqlParameter[] {
                new SqlParameter("@username",objUser.username),
                new SqlParameter("@password", objUser.password)
            };
            SqlDataReader objReader = SqlHelper.getReader(sql, param);
            if (objReader.Read())
            {
                objUser.Id = Convert.ToInt32(objReader["Id"]);
                objUser.status = Convert.ToInt32(objReader["status"]);
            }
            else {
                objUser = null;
            }
            objReader.Close();
            return objUser;
        }
    }
}

BLL-业务逻辑层 - Business Logic Layer

namespace mtWeightBLL
{
    /// <summary>
    /// 用户业务逻辑类
    /// </summary>
    public class UserManager
    {
        //创建数据访问对象
        private UserService objUserService = new UserService();

        public User UserLogin(User objUser) {
            return objUserService.UserLogin(objUser);
        }
    }
}

UIL-用户表现层

private void btnLogin_Click(object sender, EventArgs e)
        {
            //数据验证
            if (this.txtUsername.Text.Trim().Length == 0) {
                MessageBox.Show("请输入用户名", "登录提示");
                this.txtUsername.Focus();
            }
            if (this.txtPassword.Text.Trim().Length == 0)
            {
                MessageBox.Show("请输入密码", "登录提示");
                this.txtPassword.Focus();
            }

            // 封装对象
            User objUser = new User {
                username = this.txtUsername.Text.Trim(),
                password = this.txtPassword.Text.Trim()
            };
            try
            {
                objUser = objUserManager.UserLogin(objUser);
                if (objUser != null)
                {
                    if (objUser.status == 1)
                    {
                        Program.objCurrentUser = objUser;
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("用户被禁用,请联系管理员", "登录提示");
                    }
                }
                else {
                    MessageBox.Show("用户名或密码错误!", "登录提示");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("登录异常:"+ex.Message,"登录提示");
            }
        }

通用类库

引用关系


引用关系图

数据库帮助类


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

namespace DbUtil
{
    public class SqlHelper
    {
        private static String ConnString = ConfigurationManager.ConnectionStrings["ConnString"].ToString();
        #region 格式化SQL语句
        /// <summary>
        /// 增删改非查询类方法
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns></returns>
        public static int UPDATE(string sql) {
            SqlConnection conn = new SqlConnection(ConnString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally {
                conn.Close();
            }
        }
        /// <summary>
        /// 返回单条结果查询类方法
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns></returns>
        public static object getSingleResult(string sql)
        {
            SqlConnection conn = new SqlConnection(ConnString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }
        /// <summary>
        /// 多条结果查询类方法
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns></returns>
        public static SqlDataReader getReader(string sql)
        {
            SqlConnection conn = new SqlConnection(ConnString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                conn.Close();
                throw new Exception(ex.Message);
            }
          
        }
        /// <summary>
        /// 返回DataSet数据集方法
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns>结果集DataSet</returns>
        public static DataSet getDataSet(string sql)
        {
            SqlConnection conn = new SqlConnection(ConnString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            try
            {
                conn.Open();
                adapter.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }
            finally {
                conn.Close();
            }

        }
        #endregion

        #region 带参数SQL语句
        /// <summary>
        /// 增删改非查询类方法
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="param">SQl参数</param>
        /// <returns></returns>
        public static int UPDATE(string sql,SqlParameter[] param)
        {
            SqlConnection conn = new SqlConnection(ConnString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                cmd.Parameters.AddRange(param);
                return cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }
        /// <summary>
        /// 返回单条结果查询类方法
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="param">SQL参数</param>
        /// <returns></returns>
        public static object getSingleResult(string sql, SqlParameter[] param)
        {
            SqlConnection conn = new SqlConnection(ConnString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                cmd.Parameters.AddRange(param);
                return cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {

                throw new Exception(ex.Message);
            }
            finally
            {
                conn.Close();
            }
        }
        /// <summary>
        /// 多条结果查询类方法
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="param">SQL参数</param>
        /// <returns></returns>
        public static SqlDataReader getReader(string sql,SqlParameter[] param)
        {
            SqlConnection conn = new SqlConnection(ConnString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                cmd.Parameters.AddRange(param);
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                conn.Close();
                throw new Exception(ex.Message);
            }
        }
        #endregion
    }
}

项目创建

我把这个项目框架上传到这里,大家可以下载下来看一下http://down.clubunion.cn/mtWeight.zip

上一篇 下一篇

猜你喜欢

热点阅读