三层架构的原理及实现
2014-12-01 15:29
1056 查看
三层架构
代码的可扩展性和系统的后期维护:
1、三层就很好的为我们解决了这个问题.让我们不必为了业务逻辑上的微小变化而迁至整个程序的修改,只需要修改商业逻辑层中的一个函数或一个过程;
2、增强了代码的可重用性;
3、便于不同层次的开发人员之间的合作,只要遵循一定的接口标准就可以进行并行开发了,最终只要将各个部分拼接到一起构成最终的应用程序。
在项目开发的过程中,有时把整个项目分为三层架构,其中包括:
1、表示层(UI)、
2、业务逻辑层(BLL)
3、数据访问层(DAL)。
三层的作用分别如下:
表示层:为用户提供交互操作界面,这一点不论是对于Web还是WinForm都是如此,就是用户界面操作。
业务逻辑层:负责关键业务的处理和数据的传递。复杂的逻辑判断和涉及到数据库的数据验证都需要在此做出处理。根据传入的值返回用户想得到的值,或者处理相关的逻辑。
数据访问层:负责数据库数据的访问。主要为业务逻辑层提供数据,根据传入的值来操作数据库,增、删、改、查。
三层的理解
表示层的内容就是来和用户打交道,通俗讲就是展现给用户的界面,用户的要求都体现在界面上。
业务逻辑层的功能主要是实现一些具体问题的操作,它是表示层和数据访问层之间沟通的桥梁,主要负责数据的传递和处理。
数据访问层的功能就是对数据库中表的内容的增删改查。
三层的实现将我们的系统的实现过程分门别类,每一层自己做自己的事,互不影响,当我需要其他层的内容时,再去调用。当需要修改时只需改动本层的内容,不会影响到整个系统的代码。
就是传说中的解耦。让那个每一层只关心自己内部的事情,它只知道下层的存在,不知道上层的存在。达到局部改变而不影响全局的目的!
优点
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
缺点
1、降低了系统的性能。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
3、增加了开发成本。
三层与MVC的区别
1、MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以分成M、V、C,(ModelView Controller)模型-视图-控制器
2、MVC是表现层的架构,MVC的Model实际上是ViewModel,即供View进行展示的数据。ViewModel不包含业务逻辑,也不包含数据读取。
对于三层的概念查也查了,看也看了,下面是我找的一个关于三层的简单实例,真正看一下它是如何具体实现的.
我们先来一起看看实体类-Model
实质:实体类就是在完成数据库与实体类对应的功能,一个类是一张表,一个属性是一个字段!
[csharp]
view plaincopyprint?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace model
{
public class User
{
public User() { }
private string _name;
public string name
{
set { _name = value; }
get { return _name; }
}
}
}
再来说明一下,这个实例应用了配置文件来访问数据库,当然我们在做的时候可以使用SqlHelper,也可以将连接数据库的这些代码直接放在D层
[csharp]
view plaincopyprint?
<add name="ConnectionString" connectionString="Data Source=localhost;Initial Catalog=tester;User ID=sa;Password=123456"
providerName="System.Data.SqlClient" />
三层中的最底层-数据访问层(DAL) 这一层要引用实体类和对Configuration的引用
实质:就是对数据库中的内容的增,删,改,查
[csharp]
view plaincopyprint?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using model;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
namespace DAL
{
public class UserDB
{
public bool User_add(model.User model)
{
string setting = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
SqlConnection myconn=new SqlConnection(setting);
myconn.Open();
SqlCommand cmd=new SqlCommand("insert into dbo.[user]([name]) values(@name)",myconn);
cmd.Parameters.AddWithValue("@name", model.name);
if (cmd.ExecuteNonQuery()>0)
{
return true;
}
else
{
return false;
}
}
}
}
三层中的桥梁-业务逻辑层BLL 这一层需要引用实体类和数据访问层
实质:负责处理U层的问题(本例子主要是对数据层的操作)
[csharp]
view plaincopyprint?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
namespace BLL
{
public class userBLL
{
DAL.UserDB db = new UserDB();
public bool addUser(model.User model)
{
return db.User_add(model);
}
}
}
三层中的顶层-表现层UI 这一层要引用实体类和业务逻辑层
实质:具体解决做什么的问题
[csharp]
view plaincopyprint?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLL;
using model;
namespace 登陆
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
model.User thisUser = new User();
thisUser.name = TB_username.Text.ToString();
BLL.userBLL uB = new userBLL();
if (uB.addUser (thisUser))
{
MessageBox.Show ("true");
}
else
{
MessageBox.Show ("false");
}
}
}
}
三层之间的关系:
解释:
上述代码中DAL主要是对数据库中的内容的操作,在这里就是向数据库中添加用户。BLL则主要是调用DAL层的操作,返回DAL层添加用户的结果(true或者false)。这样也就是在客户端与数据库中加了一个中间层,使得两层的依赖性减小。UI层则主要完成响应用户的需求,去调用BLL层实现的adduser方法,DAL层就是实实在在做这件事情的操作。
代码的可扩展性和系统的后期维护:
1、三层就很好的为我们解决了这个问题.让我们不必为了业务逻辑上的微小变化而迁至整个程序的修改,只需要修改商业逻辑层中的一个函数或一个过程;
2、增强了代码的可重用性;
3、便于不同层次的开发人员之间的合作,只要遵循一定的接口标准就可以进行并行开发了,最终只要将各个部分拼接到一起构成最终的应用程序。
在项目开发的过程中,有时把整个项目分为三层架构,其中包括:
1、表示层(UI)、
2、业务逻辑层(BLL)
3、数据访问层(DAL)。
三层的作用分别如下:
表示层:为用户提供交互操作界面,这一点不论是对于Web还是WinForm都是如此,就是用户界面操作。
业务逻辑层:负责关键业务的处理和数据的传递。复杂的逻辑判断和涉及到数据库的数据验证都需要在此做出处理。根据传入的值返回用户想得到的值,或者处理相关的逻辑。
数据访问层:负责数据库数据的访问。主要为业务逻辑层提供数据,根据传入的值来操作数据库,增、删、改、查。
三层的理解
表示层的内容就是来和用户打交道,通俗讲就是展现给用户的界面,用户的要求都体现在界面上。
业务逻辑层的功能主要是实现一些具体问题的操作,它是表示层和数据访问层之间沟通的桥梁,主要负责数据的传递和处理。
数据访问层的功能就是对数据库中表的内容的增删改查。
三层的实现将我们的系统的实现过程分门别类,每一层自己做自己的事,互不影响,当我需要其他层的内容时,再去调用。当需要修改时只需改动本层的内容,不会影响到整个系统的代码。
就是传说中的解耦。让那个每一层只关心自己内部的事情,它只知道下层的存在,不知道上层的存在。达到局部改变而不影响全局的目的!
优点
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
缺点
1、降低了系统的性能。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
3、增加了开发成本。
三层与MVC的区别
1、MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以分成M、V、C,(ModelView Controller)模型-视图-控制器
2、MVC是表现层的架构,MVC的Model实际上是ViewModel,即供View进行展示的数据。ViewModel不包含业务逻辑,也不包含数据读取。
对于三层的概念查也查了,看也看了,下面是我找的一个关于三层的简单实例,真正看一下它是如何具体实现的.
我们先来一起看看实体类-Model
实质:实体类就是在完成数据库与实体类对应的功能,一个类是一张表,一个属性是一个字段!
[csharp]
view plaincopyprint?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace model
{
public class User
{
public User() { }
private string _name;
public string name
{
set { _name = value; }
get { return _name; }
}
}
}
再来说明一下,这个实例应用了配置文件来访问数据库,当然我们在做的时候可以使用SqlHelper,也可以将连接数据库的这些代码直接放在D层
[csharp]
view plaincopyprint?
<add name="ConnectionString" connectionString="Data Source=localhost;Initial Catalog=tester;User ID=sa;Password=123456"
providerName="System.Data.SqlClient" />
三层中的最底层-数据访问层(DAL) 这一层要引用实体类和对Configuration的引用
实质:就是对数据库中的内容的增,删,改,查
[csharp]
view plaincopyprint?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using model;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
namespace DAL
{
public class UserDB
{
public bool User_add(model.User model)
{
string setting = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
SqlConnection myconn=new SqlConnection(setting);
myconn.Open();
SqlCommand cmd=new SqlCommand("insert into dbo.[user]([name]) values(@name)",myconn);
cmd.Parameters.AddWithValue("@name", model.name);
if (cmd.ExecuteNonQuery()>0)
{
return true;
}
else
{
return false;
}
}
}
}
三层中的桥梁-业务逻辑层BLL 这一层需要引用实体类和数据访问层
实质:负责处理U层的问题(本例子主要是对数据层的操作)
[csharp]
view plaincopyprint?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
namespace BLL
{
public class userBLL
{
DAL.UserDB db = new UserDB();
public bool addUser(model.User model)
{
return db.User_add(model);
}
}
}
三层中的顶层-表现层UI 这一层要引用实体类和业务逻辑层
实质:具体解决做什么的问题
[csharp]
view plaincopyprint?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLL;
using model;
namespace 登陆
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
model.User thisUser = new User();
thisUser.name = TB_username.Text.ToString();
BLL.userBLL uB = new userBLL();
if (uB.addUser (thisUser))
{
MessageBox.Show ("true");
}
else
{
MessageBox.Show ("false");
}
}
}
}
三层之间的关系:
解释:
上述代码中DAL主要是对数据库中的内容的操作,在这里就是向数据库中添加用户。BLL则主要是调用DAL层的操作,返回DAL层添加用户的结果(true或者false)。这样也就是在客户端与数据库中加了一个中间层,使得两层的依赖性减小。UI层则主要完成响应用户的需求,去调用BLL层实现的adduser方法,DAL层就是实实在在做这件事情的操作。
相关文章推荐
- 三层架构的实现原理.02
- Winform 三层架构例子(3)--利用资源文件实现多国语言(含源代码)
- 原:使用objectdatasource进行简单三层架构的开发 , 并实现Repeater现删改查
- 最适合入门学习的三层架构例子(实现登录)
- Entity Framework 三层架构--持久层使用封装之实现类DaoTemplate 全部示范代码
- Entity Framework 三层架构--业务层使用封装之实现类ServiceTemplate
- 求:用接口实现三层架构的例子
- 三层架构实战篇——抽象工厂+反射实现验证用户登录!
- 三层架构之抽象工厂加反射----实现数据库转换
- 三层架构之抽象工厂加反射----实现数据库转换
- 三层架构实战篇——抽象工厂+反射实现验证用户登录!
- 浅析C#中三层架构的实现
- asp.net 2.0 三层架构的实现(最最原始,简单,一般, 但不平凡)
- Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理
- c#三层架构实现分页
- 转:Spring技术内幕——深入解析Spring架构与设计原理(二)IOC实现原理
- .net中实现简单三层架构
- ASP 三层架构 Convert类实现代码
- 转:Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理
- 基于.Net(C#开发)平台的三层框架架构软件的设计与实现