目录
一、三层架构概述
二、搭建三层架构
简单实例--利用三层架构添加Person成员到数据库与显示
三层即:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。
区分层次的目的即为了"高内聚低耦合"的思想。
Ø表现层(UI),展现给用户看到的界面
Ø数据访问层(DAL),主要是存放对数据类的访问(写sql语句的),即对数据库的添加、删除、修改、更新等基本操作
Ø业务逻辑层(BLL),实现功能,用来写方法及其调用。对传送数据进行逻辑判断分折,并进行传送正确的值。
中间还有一个model(模型层)作为承载数据的媒介,供上面三个层引用,用来存储实体类。
Ø实体类库(Model),主要存放数据库中的表字段
三层架构最重要的是中间的引用,这点只要做错了就要重新搭建。下面是三层的关系。
DAL引用Model
BLL引用DAL和Model
UI层引用BLL和Model
引用顺序: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中添加对Model、DAL的引用,选中BLL--》Alt+P+R--》解决方案--》项目--》选中MOdel、DAL--》确定
(3)建立业务逻辑类,选中BLL--》Shift+ALT+C--》建立业务逻辑类。LoginManager类
4.表现层(UI)
(1)在UI中添加对Model、BLL的引用,选中UI--》Alt+P+R--》解决方案--》项目--》选中MOdel、BLL--》确定
(2)编写代码传递数据给BLL层。
1、创建对应的实体类库
(1)先建立实体类库Model,打开项目,在解决方案中右键--》添加--》新建项目--》选中类库--》改名Model--》确定
(2)选中Model类库--》建立实体类。Person类
namespace Model
{
///
/// 实体类库(Model):存放数据库中的表字段
///
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;
}
}
///
/// 生成参数化构造函数。这种技术可以帮助你在创建对象的同时给对象赋初始值
///
/// 姓名
/// 性别
/// 年龄
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
{
///
/// 数据访问层(DAL)存放对数据类的访问(sql语句)
/// 即对数据库的添加、删除、修改、更新等基本操作
///
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
{
///
/// 业务逻辑层(BLL):实现功能,用来写方法及其调用。
/// 对传送数据进行逻辑判断分折,并进行传送正确的值。
///
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"; //性别