三层架构:指的是PL(present layer)层,BLL(business logical layer)层,DAL(data access layer)层,是一种总体设计的思想。
- PL层(web层):是表现层,主要是用来展示数据;
- BLL层:是处理层,主要是用来处理数据;
- DAL层:主要是从数据库获取数据的。
- PL面向用户,DAL面向数据库。
具体阐述:PL是web应用程序,调用BLL的方法将数据传给BLL或者从BLL中获取处理好的数据;BLL层是一个类库,调用DAL的方法获取数据或者将数据处理结果给DAL。
实现方式:
1.新建-项目-空解决方案
2.右键空解决方案-添加新项-web应用程序(PL层,当然还要添加web窗体)
3.右键空解决方案-添加新项-类库(BLL层)
4.右键空解决方案-添加新项-类库(DAL层)
5.添加PL层的对BLL层的引用
6.添加BLL层对DAL层的引用
PL《——————BLL《——————DAL
7.注意类库的修饰符是否为公共的
8.Default.aspx
<div>
10+12=
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
10*12=<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label><br />
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<br />
</div>
9.Default.aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
BLL.Calculate c = new BLL.Calculate();
Label1.Text = "" + c.add(10, 12);
Label2.Text = "" + c.mul(10, 12);
}
10.BLL下的Class1
namespace BLL
{
public class Calculate
{
DAL.Class1 c = new DAL.Class1();
public int add(int x, int y)
{
return c.getX() + c.getY();
}
public int mul(int x, int y)
{
return c.getX() * c.getY();
}
}
}
12.DAL下的Class1
namespace DAL
{
public class Class1
{
public int getX()
{ return 10; }
public int getY()
{
return 12;
}
}
}
补充说明:
1.一般类库的名字不是这样命名的,这个只是一个简单例子,看着比较容易理解。一般是公司名+项目名称+BLL(或DAL)。
2.三层架构可以用动软代码生成器生成。下载链接地址是:
http://www.onlinedown.net/soft/63546.htm
总结:此实例先是在web中定义了界面,然后在后台先是对BLL下的Calculate类实例化,再利用该类下的add方法;
BLL的add方法里又使用到了DAL下getX()和getY()方法;
也就是说,先在DAL里获得数据,并返回,由BLL获取数据操作,并返回操作所得的结果,最后由PL层的后台得到数据,最后显示再web上面
所以Label1.Text = " " + c.add(10,12);这里面的参数并没有实际所用,只是为了调用方法而已。里面无论写什么参数,只要是两个int型的,返回的结果是一样的,在这只是展示,并没有实际作用。
思考:明明在web界面的后台程序可以直接处理,为什么要一层一层嵌套才在web层获得数据呢?
优缺点:
优点:
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖(高内聚,低耦合);
4、有利于标准化;
5、利于各层逻辑的复用。
缺点:
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。