C#基础知识 Day31 数据库高阶 三层架构

目录

一、三层架构概述

二、搭建三层架构

简单实例--利用三层架构添加Person成员到数据库与显示


一、三层架构概述

三层即:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)

区分层次的目的即为了"高内聚低耦合"的思想。

Ø表现层(UI),展现给用户看到的界面

Ø数据访问层(DAL),主要是存放对数据类的访问(写sql语句的),即对数据库的添加、删除、修改、更新等基本操作

Ø业务逻辑层(BLL),实现功能,用来写方法及其调用。对传送数据进行逻辑判断分折,并进行传送正确的值。

中间还有一个model(模型层)作为承载数据的媒介,供上面三个层引用,用来存储实体类。

Ø实体类库(Model),主要存放数据库中的表字段

三层架构最重要的是中间的引用,这点只要做错了就要重新搭建。下面是三层的关系。

DAL引用Model

BLL引用DALModel

UI层引用BLLModel

引用顺序:UI引用BLL;BLL引用DAL;也可以间接引用

优点:

1、各层之间的改动不会影响到其他层(比较大的变动除外)

2、基本不用写SQL语句,自动生成的代码是参数化查询,可以防止SQL注入

二、搭建三层架构

1实体类库(Model,主要存放数据库中的表字段。

操作:

 (1)先建立实体类库Model,打开项目,在解决方案中右键--》添加--》新建项目--》选中类库--》改名Model--》确定

2)选中Model类库--》建立实体类。UserInfo

2.数据访问层(DAL

1)先建立数据访问层类库DAL,打开项目,在解决方案中右键--》添加--》新建项目--》选中类库--》改名DAL--》确定

2)在DAL中添加对Model的引用,选中DAL--》添加引用--》解决方案--》项目--》选中Model--》确定

3)在DAL中添加对system.configuration的引用,选中DAL--》添加引用--》程序集--》框架--》选中System.configuration--》确定

4)建立数据访问类,选中DAL--》Shift+ALT+C--》建立数据访问类。UserDB

3.业务逻辑层(BLL

1)先建立业务逻辑层类库BLL,打开项目,在解决方案中右键--》添加--》新建项目--》选中类库--》改名BLL--》确定

2)在BLL中添加对ModelDAL的引用,选中BLL--》Alt+P+R--》解决方案--》项目--》选中MOdelDAL--》确定

3)建立业务逻辑类,选中BLL--》Shift+ALT+C--》建立业务逻辑类。LoginManager

4.表现层(UI

1)在UI中添加对ModelBLL的引用,选中UI--》Alt+P+R--》解决方案--》项目--》选中MOdelBLL--》确定

2)编写代码传递数据给BLL层。

简单实例--利用三层架构添加Person成员到数据库与显示


1、创建对应的实体类库
(1)先建立实体类库Model,打开项目,在解决方案中右键--》添加--》新建项目--》选中类库--》改名Model--》确定
(2)选中Model类库--》建立实体类。Person类

namespace Model
{
    /// <summary>
    /// 实体类库(Model):存放数据库中的表字段
    /// </summary>
    public class Person
    {
        
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private int _sex;
        public int Sex
        {
            get { return _sex; }
            set { _sex = value; }
        }

        private int _age;
        public int Age
        {
            get { return _age; }
            set
            {
                if (value < 0 || value > 100)
                {
                    _age = 0;
                }
                _age = value;
            }
        }
        /// <summary>
        /// 生成参数化构造函数。这种技术可以帮助你在创建对象的同时给对象赋初始值
        /// </summary>
        /// <param name="name">姓名</param>
        /// <param name="sex">性别</param>
        /// <param name="age">年龄</param>
        public Person(string name, int sex, int age)
        {
            Name = name;
            Sex = sex;
            Age = age;
        }
        public Person()//无参构造函数
        {
            
        }
    }
}


2、创建数据库访问层DAL层
    (1)在解决方案中右键--》添加--》新建项目--》选中类库--》改名DAL--》确定
    (2)在该层,添加对Model层的引用
    (3)在该层,添加对HuaXingSqlHelper的引用
    (4)添加命名空间
        using Model;
        using HuaXingSqlHelper;
    (5)先实现添加Person的方法:public int AddPerson(Person per);,把传递进来的Person对象,添加到数据库中
    (6)在DAL中添加对system.configuration的引用,
        选中DAL--》添加引用--》程序集--》框架--》选中System.configuration--》确定
 

namespace DAL
{
    /// <summary>
    /// 数据访问层(DAL)存放对数据类的访问(sql语句)
    /// 即对数据库的添加、删除、修改、更新等基本操作
    /// </summary>
    public class PersonDB
    {
        public int AddPerson(Person per)
        {
            string sql = string.Format("insert Person values(@Name,@Sex,@Age)");
            //创建SqlCommand参数
            SqlParameter[] pars = new SqlParameter[] {
            new SqlParameter("@Name", SqlDbType.VarChar, 20) { Value = per.Name },
            new SqlParameter("@Sex", SqlDbType.Int) { Value = per.Sex },
            new SqlParameter("@Age", SqlDbType.Int) { Value = per.Age }
            };
            
            //调用类库中的方法
            return HuaXingHelper.HuaXingExecuteNonQuery(sql,pars);
        }
        public DataTable ShowAllPerson()
        {
            string sql = "select * from Person";
            //调用类库中的方法显示数据
            return HuaXingHelper.HuaXingAdapter(sql, null);
        }
    }
}


3、添加BLL层:打开项目,在解决方案中右键--》添加--》新建项目--》选中类库--》改名BLL--》确定
    (1)在BLL中添加对Model、DAL的引用,选中BLL--》Alt+P+R--》解决方案--》项目--》选中MOdel、DAL--》确定
    (2)建立业务逻辑类,选中BLL--》Shift+ALT+C--》建立业务逻辑类。PersonManager类
    (3)实例化一个DAL层的类对象,添加一个方法

namespace BLL
{
    /// <summary>
    /// 业务逻辑层(BLL):实现功能,用来写方法及其调用。
    /// 对传送数据进行逻辑判断分折,并进行传送正确的值。
    /// </summary>
    public class PersonManager
    {
        PersonDB perDAL = new PersonDB();
        public int AddPersonBLL(Person per)
        {
            //调用DAL中的方法,存入数据库。
            return perDAL.AddPerson(per);
        }
        public DataTable ShowAllPersonBll()
        {
            return perDAL.ShowAllPerson();
        }
    }
}


        
4、添加UI层:
    (1)在UI中添加对Model、BLL的引用,选中UI--》Alt+P+R--》解决方案--》项目--》选中MOdel、BLL--》确定
    (2)设计界面
    (3)添加命名空间
        using Model;
        using BLL;
    (4)修改App.Config文件!!!
    (5)实现添加按钮与显示按钮

namespace _3_tierArchitecture
{
    public partial class Form1 : Form
    {
        PersonManager perBLL = new PersonManager();
        public Form1()
        {
            InitializeComponent();
            //MessageBox.Show(HuaXingHelper.strCon.ToString());
        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            string Name = txtName.Text.Trim().ToString();
            int Sex = int.Parse(txtSex.Text.Trim().ToString());
            int Age = int.Parse(txtAge.Text.Trim().ToString());
            Person per = new Person(Name, Sex, Age);
            int n=perBLL.AddPersonBLL(per);
            if (n > 0)
            {
                MessageBox.Show("添加成功!");
            }
            else
            {
                MessageBox.Show("添加失败!");
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //调用BLL中的方法,显示数据库中所有人
            DataTable dt = perBLL.ShowAllPersonBll();
            //将数据绑定到DataGridView中
            dataGridView1.DataSource = dt;
        }
    }
}


            //从控件上获取用户输入的值
            string sex = combSex.Text.Trim()=="男"?"1":"0";   //性别

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值