<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0057)http://reeezak.cnblogs.com/archive/2006/06/24/434439.html -->
<HTML><HEAD id=Head><TITLE>[翻译]Scott Mitchell 的ASP.NET 2.0数据教程之二:创建一个业务逻辑层 - Reeezak's Home - 博客园</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content=".Net C#" name=keywords><LINK id=MainCss
href="Scott Mitchell 的ASP_NET 2_0数据教程之二:创建一个业务逻辑层 - Reeezak's Home - 博客园_files/style.css"
type=text/css rel=stylesheet><LINK id=RSSLink title=RSS
href="http://www.cnblogs.com/Reeezak/rss.aspx" type=application/rss+xml
rel=alternate>
<META content="MSHTML 6.00.3790.2759" name=GENERATOR></HEAD>
<BODY>
<FORM id=Form1 name=Form1 onsubmit="javascript:return WebForm_OnSubmit();"
action=434439.html method=post>
<DIV><INPUT id=__EVENTTARGET type=hidden name=__EVENTTARGET> <INPUT
id=__EVENTARGUMENT type=hidden name=__EVENTARGUMENT> <INPUT
id=" __VIEWSTATE" type=hidden name=__VIEWSTATE> </DIV>
<SCRIPT type=text/javascript>
<!--
var theForm = document.forms['Form1'];
if (!theForm) {
theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
// -->
</SCRIPT>
<SCRIPT
src="Scott Mitchell 的ASP_NET 2_0数据教程之二:创建一个业务逻辑层 - Reeezak's Home - 博客园_files/WebResource.axd"
type=text/javascript></SCRIPT>
<SCRIPT language=JavaScript>
function ctlent(evt)
{
if(evt.ctrlKey && evt.keyCode == 13)
{
try
{
TempSave('AnonymousPostComment1_tbComment');
}
catch(ex)
{
}
finally
{
__doPostBack('AnonymousPostComment1$btnSubmit','')
}
}
}</SCRIPT>
<SCRIPT language=JavaScript>function SetReplyAuhor(author){document.getElementById('AnonymousPostComment1_tbComment').value+="@"+author+"\n";document.getElementById('AnonymousPostComment1_tbComment').focus();return false}</SCRIPT>
<SCRIPT
src="E:\网页\Scott Mitchell 的ASP_NET 2_0数据教程之二:创建一个业务逻辑层 - Reeezak's Home - 博客园_files\WebResource(1).axd"
type=text/javascript></SCRIPT>
<SCRIPT type=text/javascript>
<!--
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
// -->
</SCRIPT>
<!--done-->
<DIV id=header><!--done-->
<DIV class=header>
<DIV class=headerText><A class=headermaintitle id=Header1_HeaderTitle
href="http://www.cnblogs.com/Reeezak/">Reeezak's Home</A><BR>Your angel will
defend you, even if it means risking life! </DIV></DIV></DIV>
<DIV id=mylinks><!--done--><A class=listitem id=MyLinks1_HomeLink
href="http://www.cnblogs.com/">博客园</A> :: <A class=listitem
id=MyLinks1_MyHomeLink
href="http://reeezak.cnblogs.com/">首页</A> :: <A class=listitem
id=MyLinks1_NewPostLink
href="http://www.cnblogs.com/Reeezak/admin/EditPosts.aspx?opt=1">新随笔</A> ::
<A class=listitem id=MyLinks1_ContactLink accessKey=9
href="http://www.cnblogs.com/Reeezak/contact.aspx">联系</A> :: <A
class=listitem id=MyLinks1_Syndication
href="http://www.cnblogs.com/Reeezak/Rss.aspx">聚合</A> <A
id=MyLinks1_XMLLink href="http://www.cnblogs.com/Reeezak/Rss.aspx"><IMG
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
src="Scott Mitchell 的ASP_NET 2_0数据教程之二:创建一个业务逻辑层 - Reeezak's Home - 博客园_files/xml.gif"></A> ::
<A class=listitem id=MyLinks1_Admin
href="http://www.cnblogs.com/Reeezak/admin/EditPosts.aspx">管理</A> </DIV>
<DIV id=mytopmenu>
<DIV id=mystats><!--done-->
<DIV class=blogStats>posts - 27, comments - 86, trackbacks - 0
</DIV></DIV></DIV>
<DIV id=leftcontent style="DISPLAY: none">
<DIV id=leftcontentcontainer>
<H3>留言簿<SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px">(1)</SPAN></H3>
<UL>
<LI><A id=SingleColumn1_ctl00_lnkMessages
href="http://www.cnblogs.com/Reeezak/Contact.aspx?id=1">给我留言</A>
<LI><A id=SingleColumn1_ctl00_lnkPublicMsgView
href="http://www.cnblogs.com/Reeezak/default.aspx?opt=msg">查看公开留言</A>
<LI><A id=SingleColumn1_ctl00_lnkPrivateMsgView
href="http://www.cnblogs.com/Reeezak/admin/MyMessages.aspx">查看私人留言</A>
</LI></UL>
<H3>我参与的团队</H3>
<DIV class=RecentComment>
<UL style="WORD-BREAK: break-all">
<LI><A id=SingleColumn1_ctl01_TeamList_ctl01_lnkTeam
href="http://www.cnblogs.com/team/BeginnerTraining.html">.NET新手training活动(0/161)</A>
<LI><A id=SingleColumn1_ctl01_TeamList_ctl02_lnkTeam
href="http://www.cnblogs.com/team/DotNetControls.html">.NET 控件与组件开发(1/490)</A>
<LI><A id=SingleColumn1_ctl01_TeamList_ctl03_lnkTeam
href="http://guangzhou.cnblogs.com/">广州.NET俱乐部(0/860)</A>
<LI><A id=SingleColumn1_ctl01_TeamList_ctl04_lnkTeam
href="http://www.cnblogs.com/team/AjaxAndAtlas%20.html">Ajax&Atlas技术团队(1/301)</A>
</LI></UL></DIV><!--done-->
<H1 class=catListTitle>随笔分类</H1>
<UL class=catList>
<LI class=catListItem><A class=listitem
id=SingleColumn1_Categories_CatList_ctl00_LinkList_ctl01_Link
href="http://www.cnblogs.com/Reeezak/category/60337.html">ASP.NET(7)</A><A
class=listitem
id=SingleColumn1_Categories_CatList_ctl00_LinkList_ctl01_RssLink
title="Subscribe to ASP.NET(7)"
href="http://www.cnblogs.com/Reeezak/category/60337.html/rss"><IMG
title="Subscribe to ASP.NET(7)"
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
src="E:\网页\Scott Mitchell 的ASP_NET 2_0数据教程之二:创建一个业务逻辑层 - Reeezak's Home - 博客园_files\xml(1).gif"></A>
<LI class=catListItem><A class=listitem
id=SingleColumn1_Categories_CatList_ctl00_LinkList_ctl02_Link
href="http://www.cnblogs.com/Reeezak/category/62230.html">WinForms(2)</A><A
class=listitem
id=SingleColumn1_Categories_CatList_ctl00_LinkList_ctl02_RssLink
title="Subscribe to WinForms(2)"
href="http://www.cnblogs.com/Reeezak/category/62230.html/rss"><IMG
title="Subscribe to WinForms(2)"
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
src="E:\网页\Scott Mitchell 的ASP_NET 2_0数据教程之二:创建一个业务逻辑层 - Reeezak's Home - 博客园_files\xml(1).gif"></A>
<LI class=catListItem><A class=listitem
id=SingleColumn1_Categories_CatList_ctl00_LinkList_ctl03_Link
href="http://www.cnblogs.com/Reeezak/category/36394.html">程序人生(11)</A><A
class=listitem
id=SingleColumn1_Categories_CatList_ctl00_LinkList_ctl03_RssLink
title="Subscribe to 程序人生(11)"
href="http://www.cnblogs.com/Reeezak/category/36394.html/rss"><IMG
title="Subscribe to 程序人生(11)"
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
src="E:\网页\Scott Mitchell 的ASP_NET 2_0数据教程之二:创建一个业务逻辑层 - Reeezak's Home - 博客园_files\xml(1).gif"></A>
<LI class=catListItem><A class=listitem
id=SingleColumn1_Categories_CatList_ctl00_LinkList_ctl04_Link
href="http://www.cnblogs.com/Reeezak/category/62282.html">翻译(5)</A><A
class=listitem
id=SingleColumn1_Categories_CatList_ctl00_LinkList_ctl04_RssLink
title="Subscri
asp.net2.0三层架构详细说明[简体中文]
5星 · 超过95%的资源 需积分: 0 99 浏览量
更新于2008-08-05
2
收藏 8.87MB RAR 举报
ASP.NET 2.0三层架构是一种常见的软件设计模式,它将应用程序分解为数据访问层、业务逻辑层和表示层三个独立的部分,以提高代码的可维护性、可扩展性和复用性。以下是对这个主题的详细说明:
1. 数据访问层(DAL,Data Access Layer):
这是三层架构的基础,主要负责与数据库进行交互,执行SQL语句,获取或更新数据。在ASP.NET 2.0中,可以使用ADO.NET组件如DataSet、DataTable、DataAdapter等来实现这一层。DAL通常包含数据库连接、数据查询、事务处理等操作,并通过接口或基类供上层调用,确保业务逻辑层与数据库操作分离。
2. 业务逻辑层(BLL,Business Logic Layer):
BLL处于中间层,是整个应用的核心,它实现了具体业务规则和流程。例如,用户注册时,BLL会验证输入数据的有效性,处理密码加密,调用DAL进行数据存储等。BLL不直接与数据库打交道,而是通过DAL接口,这样可以避免数据库操作的细节暴露给表示层,同时使得业务逻辑可以独立于数据源进行测试和调整。
3. 表示层(Presentation Layer):
表现层通常指的是用户界面,如ASP.NET网页。在这个层面上,开发者使用ASP.NET控件、页面生命周期方法等构建用户交互界面。用户输入的数据通过控件事件传递到BLL进行处理,BLL再通过DAL与数据库交互,最后将结果显示回用户界面。在ASP.NET 2.0中,可以使用Web Forms或者MVC框架来构建表示层。
4. 通信机制:
在三层架构中,各层之间的通信通常是通过接口或基类实现的,以保持松耦合。比如,BLL通过定义一组接口,而DAL实现这些接口,表示层调用BLL的方法来完成业务操作。这样,即使某一层发生变化,也不会影响其他层。
5. 优点:
- 可维护性:每一层都有明确的责任,修改某一层不会影响其他层。
- 可扩展性:添加新功能时,只需要在对应层进行改动,不会影响整体结构。
- 测试友好:可以对每一层单独进行单元测试,提高软件质量。
- 复用性:业务逻辑层可以独立于用户界面和数据存储,方便在不同项目中复用。
6. 挑战与实践:
- 分层设计需要更多的设计时间,尤其是接口设计和层间通信的规划。
- 调试可能更为复杂,因为错误可能出现在多个层次之间。
- 需要合理管理各层间的依赖关系,避免过度封装导致的效率下降。
总结起来,ASP.NET 2.0三层架构是一种有效的软件设计模式,它帮助开发者组织和管理复杂的Web应用程序。通过合理的分层,可以提升开发效率,保证代码的稳定性和可维护性,是企业级应用开发的常用选择。