三层构架+winform实例(以注册和登录为例)

一、开发目的

了解和掌握三层架构,实现注册和登录功能

二、开发环境

Visual Studio 2017,SQL Server 2012,windows7

三、相关知识

1.三层架构

  所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。三层指的是逻辑上的三层,三层结构让客户端与数据库不直接交互。

(1)三层结构及其各层作用

三层结构包括数据访问层(DAL),业务逻辑层(BLL),界面层(UI)

①数据访问层(DAL):对数据源的直接操作(并不是对数据直接操作),为下一层提供数据,从数据源加载、写入、删除数据,DAL层不可以进行“修改”操作,修改任务交给外部处理。

②逻辑访问层(BLL):针对具体问题的操作,具有承上启下的作用,负责从UI中获取用户指令和数据,执行业务逻辑或者从DAL获取数据供给UI显示。

③界面层(UI):UI层负责向用户展现特定的业务数据或者接受用户输入的数据与指令。

(2)Model数据模型
Model数据模型独立于三层结构之外,对数据库表封装。
(3)三层结构逻辑图

2.其他相关知识

掌握类和对象,类成员,构造函数相关知识(此处不做展开)


四、实例开发过程(已注册和登录为例)

1.构建数据库及表


2.创建一个新的winform程序,创建Modle类、DAL类、BLL类


3.对UI界面作如下布局


4.在Model类中对数据表进行封装

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

namespace Model
{
   public class userinfo
    {
        public String name { get; set; }
        public String pwd { get; set; }
    }
}

5.在DAL类中设计数据源访问

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


namespace DAL
{
   public class LoginDal
    {
        public bool DLogin(Model.userinfo user)
        {
            string connString = "Data Source=VICTORY;Initial Catalog = test; Persist Security Info = True; User ID = sa; Password = 123456";
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand("select * from users3_0 where name = '" + user.name + "' and pwd = '" + user.pwd + "'",conn);
            conn.Open();
            SqlDataReader da = cmd.ExecuteReader();
            if(da.Read())
            {
                return true;
            }
            else

            {
                return false;
            }
        }
    }

    public class AddDAl
    {
        public bool DAdd(Model.userinfo user)
        {
            string connString = "Data Source=VICTORY;Initial Catalog = test; Persist Security Info = True; User ID = sa; Password = 123456";
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand("insert into users3_0 values(@name,@pwd)",conn);
            cmd.Parameters.AddWithValue("@name", user.name);
            cmd.Parameters.AddWithValue("@pwd", user.pwd);
            conn.Open();
            if(cmd.ExecuteNonQuery()>0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

6.建立业务逻辑层,即设计BLL类(已登录和注册为例),需要添加对DAL、Model 的引用。

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

namespace Bll
{
    public class LoginBll
    {
        DAL.LoginDal dl = new LoginDal();
        public bool BLogin(Model.userinfo Buser)
        {
            return dl.DLogin(Buser);
        }
    }

    public class AddBll
    {
        DAL.AddDAl al = new AddDAl();
        public bool BAdd(Model.userinfo Buser)
        {
            return al.DAdd(Buser);
        }
    }
}

7.编辑用户界面(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;
using Model;
using DAL;
using Bll;

namespace Test3._0
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Model.userinfo nowuser = new userinfo();
            nowuser.name = textBox1.Text.Trim().ToString();
            nowuser.pwd = textBox2.Text.Trim().ToString();
            Bll.LoginBll lb = new LoginBll();
            if(lb.BLogin(nowuser))
            {

                MessageBox.Show("登陆成功");
            }
            else
            {
                MessageBox.Show("登录失败");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Model.userinfo nowuser = new userinfo();
            nowuser.name = textBox1.Text.ToString();
            nowuser.pwd = textBox2.Text.ToString();
            Bll.AddBll ab = new AddBll();
            if(ab.BAdd(nowuser))
            {
                MessageBox.Show("注册成功");
            }
            else
            {
                MessageBox.Show("注册失败");
            }
        }
    }
}

8.运行结果






五、总结

  良好的扩展性、灵活性、可重用性是三层架构带来的优势,当业务逻辑需要修改时,只需关注某部分或者某几部分,而不用修改整个程序。让程序分层次,也增强了程序的可维护性。
  本实例的设计逻辑为Model-->DAL-->BLL-->UI。

猜你喜欢

转载自blog.csdn.net/qq_40564078/article/details/80245543