web程序分层结构

来源:百度文库 编辑:神马文学网 时间:2024/04/30 04:02:06
web程序分层结构
今天突然想到分层的问题,可能有的晚了,不过问题可能不是很严重,因为我的数据访问很多都是在一个类里面实现的。
为了搞明白分层的涵义,浏览了一些资料,把其中的一些摘录如下:
一篇好文章:用MS.NET开发三层结构应用程序
1、推荐的实例:PetShop、Dowamish
2、
不用想得这么复杂,说白了,三层架构就是
cs文件是其中一层
不在CS文件中直接操作数据库,把所有操作数据库的语句都写成类,这个类文件又是其中一层,
SQL server的东西(如存储过程等)又是一层
3、
依我认为,这样比较清晰,不必搞得这么复杂。
1、新建一个项目。
2、添加,新建项目,类库。(需要多少层就建多少次)
在需要引用的地方加上using即可。
4、
“三层结构”一词中的“三层”是指:“外观层”、“中间层”、“数据库层”。其中:
外观层:位于最外层,直接呈现在用户面前。用于显示数据,并为用户提供一种交互式的界面。
中间层:负责处理用户输入的信息,或者是将这些信息发送给数据库层进行保存,或者是调用数据库层中的函数再次读出这些数据。
数据库层:仅实现对数据的保存和读取操作。
通俗点说:一个“三层结构”的Web应用程序,就象是公司生产线。
WebUI(Web User Interface Layer)就像是公司的经理,他负责洞察市场趋势,决策产品的生产。并根据市场筹策下一步计划。
BLL(Business Logic Layer)就像是公司的管理员,他主要负责管理下层员工,传达上级布置的生产任务给员工,并将生产结果反馈给上级Web。
DA(Data Access Layer)就是公司里的工人,他们主要是负责产品的生产装配工作,并将生产结果反馈给上级InterService。他们并不需要知道产品将销往何处,也不用关心产品销量。只要能完成任务,就可以拿到报酬。
那么我们假设有一段登录代码,则可以这样处理Web程序,外观层负责接收前台页面的数据,然后传给中间层,中间层对数据进行处理,比如格式化,防SQL注入等等一些,这样的数据再传给数据访问层然后与数据库进行操作,比如与数据库的用户名和密码匹配等等一些代码。
5、
http://community.csdn.net/Expert/topic/4294/4294668.xml?temp=.8061029
Web 层
Web 层为客户端提供对应用程序的访问。这一层是作为 Duwamish.sln 解决方案文件中的 Web 项目实现的。Web 层由 ASP.NET Web 窗体和代码隐藏文件组成。Web 窗体只是用 HTML 提供用户操作,而代码隐藏文件实现各种控件的事件处理。
业务外观层
业务外观层为 Web 层提供处理帐户、类别浏览和购书的界面。这一层是作为 Duwamish.sln 解决方案文件中的 BusinessFacade 项目实现的。业务外观层用作隔离层,它将用户界面与各种业务功能的实现隔离开来。除了低级系统和支持功能之外,对数据库服务器的所有调用都是通过此程序集进行的。
业务规则层
业务规则层是作为 Duwamish.sln 解决方案文件中的 BusinessRules 项目实现的,它包含各种业务规则和逻辑的实现。业务规则完成如客户帐户和书籍订单的验证这样的任务。
数据访问层
数据访问层为业务规则层提供数据服务。这一层是作为 Duwamish.sln 解决方案文件中的 DataAccess 项目实现的
代码示例:
以下是两种不同处理路径的代码示例:
获取商品目录
表示层调用业务外观层:
productSystem = new ProductSystem();
categorySet = productSystem.GetCategories(categoryID);
业务外观层直接调用数据层:
public CategoryData GetCategories(int categoryId)
{
if ( dsCommand == null )
{
throw new System.ObjectDisposedException( GetType().FullName );
}
return FillCategoryData("GetCategories", "@CategoryId", categoryId);
}
添加定单
表示层调用业务外观层:
public void AddOrder()
{
ApplicationAssert.CheckCondition(cartOrderData != null, "Order requires data", ApplicationAssert.LineNumber);
ApplicationLog.WriteTrace("Duwamish7.Web.Cart.AddOrder:\r\nCustomerId: " +
cartOrderData.Tables[OrderData.CUSTOMER_TABLE].Rows[0][OrderData.PKID_FIELD].ToString());
cartOrderData = (new OrderSystem()).AddOrder(cartOrderData);
}
业务外观层调用业务规则层:
public OrderData AddOrder(OrderData order)
{
ApplicationAssert.CheckCondition(order != null, "Order is required", ApplicationAssert.LineNumber);
(new BusinessRules.Order()).InsertOrder(order);
return order;
}
业务规则层调用数据层:
public bool InsertOrder(OrderData order)
{
//此处省略复杂的处理逻辑
if ( isValid )
{
using (DataAccess.Orders ordersDataAccess = new DataAccess.Orders())
{
return (ordersDataAccess.InsertOrderDetail(order)) > 0;
}
}
else
return false;
}
_xyz