




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ASP.NET - Spring 2015School of Computer Science & Engineering, ZSCASP.NET网站开发架构网站开发架构-概述与案例概述与案例1 B/S架构设计理念架构设计理念2 单层设计架构单层设计架构3 二层设计架构二层设计架构4 三层设计架构三层设计架构ASP.NET - Spring 2015School of Computer Science & Engineering, ZSCWEB系统开发架构概述系统开发架构概述WEB系统几乎都涉及数据库访问系统几乎都涉及数据库访问利用我们已经学会的技术:静态利用我们已经学会的技术
2、:静态HTML网页制作、动态服务器控件、网页制作、动态服务器控件、数据库编程等,完全可以编写出数据库编程等,完全可以编写出中小型中小型的的ASP.NET网站网站面对团队合作、规模庞大的面对团队合作、规模庞大的ASP.NET项目,我们怎么应对?项目,我们怎么应对?可维护性、可重用性、代码灵活性、团队分工与合作,这些问题该可维护性、可重用性、代码灵活性、团队分工与合作,这些问题该如何解决?如何解决?解决思路(之一):对项目进行分层、分类、分块,满足软件工程解决思路(之一):对项目进行分层、分类、分块,满足软件工程的的“高内聚、低耦合高内聚、低耦合”的准则的准则这就是运用这就是运用WEB系统开发架构
3、的初衷系统开发架构的初衷ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC1 B/S架构设计理念架构设计理念B/S架构与架构与C/S架构的区别:架构的区别:(1)简化客户端,方便软件的安装和部署。)简化客户端,方便软件的安装和部署。n它不需要像它不需要像C/S系统那样在客户机上安装专门的客户端软件,系统那样在客户机上安装专门的客户端软件,而只需要安装常用的而只需要安装常用的Web浏览器,这样不仅可以节省计算机磁盘空浏览器,这样不仅可以节省计算机磁盘空间,还可以降低用户使用软件的难度。间,还可以降低用户使用
4、软件的难度。(2)便于开发和维护,在修改了应用程序的运行逻辑)便于开发和维护,在修改了应用程序的运行逻辑后,不需要用户更新浏览器。后,不需要用户更新浏览器。n传统的传统的C/S系统则必须强制用户更新客户端程序。系统则必须强制用户更新客户端程序。(3)Web浏览器是基于简单的浏览器是基于简单的HTTP协议协议n传统的传统的C/S系统可以自己定制通信协议,但各个协议之间可能系统可以自己定制通信协议,但各个协议之间可能不易协调而造成冲突。不易协调而造成冲突。(4)B/S系统可以建立在任意一个可靠的服务器软件平系统可以建立在任意一个可靠的服务器软件平台上(例如台上(例如IIS7)n传统的传统的C/S系
5、统则可能需要编写独立的服务器软件,整个系统系统则可能需要编写独立的服务器软件,整个系统的可靠性难以得到保证。的可靠性难以得到保证。ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC2 单层设计架构单层设计架构h1“留言簿留言簿”功能及数据结构设计功能及数据结构设计(1)显示留言功能:列表显示留言数据库中的所有留言,效果如图1所示。图1 显示留言效果图ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC2 单层设计架构单
6、层设计架构(2)发表留言功能:界面效果如图2所示。发表留言功能的流程如图3所示。 图2 发表留言界面 图3 发表留言功能流程图ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC2 单层设计架构单层设计架构(3)留言数据库LMessageDB包含两张表,注册用户表RegUser和存储留言的留言信息表LWord,表结构如表1、表2所示。表1 注册用户表RegUser表2 留言信息表LWordASP.NET - Spring 2015School of Computer Science & Engine
7、ering, ZSC2 单层设计架构单层设计架构h 2单层开发架构设计单层开发架构设计单层结构的应用程序设计较简单,所有代码都直接写在网页的类文件中。本例仅包含查看留言和发表留言两个功能,因此只需设计两个网页,一个是显示留言的网页,文件名为ListMessage.aspx,另一个是发表留言的网页,文件名为PostMessage.aspx,为了与数据库LMessageDB连接,需要配置web.config文件中的数据库连接字符串“TraceLWordDB”,内容如下: 参照图1的外观效果和功能要求,显示留言的网页ListMessage.aspx代码。显示留言页面的后台ListMessage.as
8、px.cs代码。发送留言网页PostMessage.aspx代码。发送留言页面后台PostMessage.aspx.cs代码。ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC2 单层设计架构单层设计架构程序分析:(1)从上面的代码可以看出,两个网页类都调用了数据库操作类SqlConnection、SqlCommand、SqlDataAdapter。调用关系如图4所示。(2)由于两个网页类都直接与数据库操作类发生联系,所以它破坏了软件“设计模式”的一个重要原则:“迪米特法则”。“迪米特法则”的主要原则是让
9、一个类尽量少地与其他的类发生联系。如果破坏这个原则,那么当数据库操作类发生变化,就会造成两个网页类也要做出相应的变化,这种连锁反应式的变化会增加软件的维护成本。图4 网页类与数据库操作类的调用关系ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC3 二层设计架构二层设计架构3.1 “门面模式门面模式”简介简介门面模式要解决这样一个问题:如果多个类之间存在联系,从而形成一张关系网,如图5所示。当其中一个类被修改,很可能会导致其他的类也要随之修改,比如,Class1类被修改了,则Class2、Class3、C
10、lass4、Class5都要修改,这增加了软件的维护难度。为避免这样的问题出现,可以引入一个“中介者”类,并且令所有类都只与这个中介者类进行通信,如图6所示。从图6可以看出,当其中一个类修改了,只需修改中介者类就可以了,不会导致其他的类也要修改,这样就降低了软件的维护难度。 图5 多个类之间的关系图 图6 引入“中介者”类后的关系图ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC3.2 二层开发设计架构二层开发设计架构在前面的单层结构的基础上,在页面类和数据库操作类之间增加一个“中介者”类DBTask,
11、使两个页面类摆脱对数据库操作类的直接调用。调用关系如图7所示。图7 二层架构的类关系图ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC3.2 二层开发设计架构二层开发设计架构h1封装获取留言功能的函数封装获取留言功能的函数考察一下显示留言ListMessage.aspx.cs中访问数据库操作类的部分代码:/ 绑定留言信息 private void LWords_DataBind() SqlConnection dbConn = new SqlConnection( ConfigurationManage
12、r.ConnectionStringsTraceLWordDB.ConnectionString); SqlDataAdapter dbAdp = new SqlDataAdapter(SQL_GetAllLWords, dbConn); DataSet ds = new DataSet(); dbAdp.Fill(ds, LWordList); / 为repeater控件指定数据源 this.m_aspLMessage.DataSource = ds.TablesLWordList.DefaultView; this.m_aspLMessage.DataBind(); ASP.NET - S
13、pring 2015School of Computer Science & Engineering, ZSC3.2 二层开发设计架构二层开发设计架构在上面的代码中,粗体字部分包含了访问数据库的代码。在二层架构设计的页面类中不应包含这些直接访问数据库代码,应将这些代码独立出来,封装到DBTask类中,假设封装为ListLWord函数(返回DataSet对象),关键代码如下:/ 获取所有留言信息的SQL 字符串private const string SQL_GetAllLWords = SELECT * FROMLWordORDER BY LWordID DESC;/ 获取留言信息pu
14、blic DataSet ListLWord() SqlConnection dbConn = new SqlConnection( ConfigurationManager.ConnectionStringsTraceLWordDB.ConnectionString); SqlDataAdapter dbAdp = new SqlDataAdapter(SQL_GetAllLWords, dbConn); DataSet ds = new DataSet(); dbAdp.Fill(ds, LWordList); return ds;ASP.NET - Spring 2015School o
15、f Computer Science & Engineering, ZSC3.2 二层开发设计架构二层开发设计架构上面代码中封装并公开了一个函数ListLWord(),可以调用它来获取全部留言,返回结果是DataSet数据集。因此可以将显示留言页面ListMessage.aspx.cs代码相应地简化如下:/ 绑定留言信息private void LWords_DataBind() /从DBTask 获取数据集合,绑定到页面中Repeater控件 this.m_aspLMessage.DataSource = (new DBTask().ListLWord(); this.m_aspLM
16、essage.DataBind(); ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC3.2 二层开发设计架构二层开发设计架构h2封装发送留言功能的函数封装发送留言功能的函数再分析一下发送留言PostMessage.aspx.cs的代码,可以归纳出它实现了4个数据库访问的功能。(1)建立数据库连接(多个程序都要连接数据库);(2)获取已注册的用户信息;(3)注册一个新用户;(4)发送新留言。这4个功能都要直接调用数据库操作类SqlConnection、SqlCommand、SqlDataAdapter,
17、因此应把这4个功能封装成4个函数以供页面类调用,这样页面类就不需直接调用数据库操作类来实现相应的功能。封装后的DBTask类的完整代码。ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC3.2 二层开发设计架构二层开发设计架构封装后的DBTask类结构如图8所示。图8 DBTask类结构图在DBTask类中,共封装了4个公开的函数和1个私有方法,分别是获取留言函数ListLWord()、发送留言函数PostLWord(string nickName, string textContent)、获取注册用户信
18、息函数GetRegUser(string nickName)和注册新用户函数Register(string nickName, string passWord)。建立数据库连接方法CreateConnection()仅在类中使用,供其他4个函数调用。这些函数都包含直接访问数据库的代码,且实现特定的功能,将它们独立出来,供页面类调用,可使得页面类不再包含直接访问数据库的代码。有了DBTask类,就可以将发送留言PostMessage.aspx.cs代码相应地简化。ASP.NET - Spring 2015School of Computer Science & Engineering,
19、ZSC4 三层设计架构三层设计架构4.1 简单三层设计架构简单三层设计架构将页面类中的复杂的业务逻辑规则抽离出来,形成单独的一层,称为业务逻辑层。这种简单的三层架构如图9所示。图9 三层架构的类关系图ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.1 简单三层设计简单三层设计架构架构由于发送留言页面中业务规则稍微复杂,将其代码封装成PostLWord函数,而其他的规则都只是直接调用DBTask对象的同名方法即可,封装后的类结构如图10所示。分析发送和显示留言的业务规则后,封装的InterServic
20、e.cs类代码。图10 InterService类结构图ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.1 简单三层设计简单三层设计架构架构相应的显示留言页面代码ListMessage.aspx.cs修改如下:namespace Message3 public partial class ListMessage : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) this.LWords_DataBind(
21、); / 绑定留言信息 private void LWords_DataBind() / 从DBTask 获取数据集合,绑定到页面中Repeater控件 this.m_aspLMessage.DataSource = (new InterService().ListLWord(); this.m_aspLMessage.DataBind(); 相应的发送留言页面代码PostMessage.aspx.cs修改。ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.2 用用Visual Studio 创建三层
22、设计架构创建三层设计架构一般来说,三层架构一旦确定,不允许跨层调用,否则违背分层初衷和意义。为了避免不同层在同一项目中可能出现的跨层调用,可将不同的层分开在不同的项目中完成。创建项目分离的三层设计架构的具体步骤如下。h1建立空白解决方案建立空白解决方案启动Visual Studio,选择主菜单【文件】【新建】【项目】,在弹出的“新建项目”对话框中,选择【Visual Stuido 解决方案】【空白解决方案】,输入解决方案的名称“LMessage3”和位置,单击“确定”按钮,新建的解决方案如图11所示。图11 三层架构解决方案 ASP.NET - Spring 2015School of Com
23、puter Science & Engineering, ZSC4.2 用用Visual Studio创建三层设计架构创建三层设计架构h2建立表示层项目(建立表示层项目(WebUI)(1)建立项目:选择主菜单【文件】【新建】【项目】,在弹出的“新建项目”对话框中,选择【Web】【ASP.NET Web应用程序】,输入项目的名称“WebUI”,选择“添入解决方案”,单击“确定”按钮即可,效果如图12所示。(2)设置项目的程序集名称和默认命名空间:右键单击WebUI项目,选择属性菜单,在“属性”对话框中,将项目的程序集名称和默认命名空间均改为“LMessage3.WebUI”,保存即可。
24、图12 表示层项目ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.2 用用Visual Studio 创建三层设计架构创建三层设计架构h3建立业务逻辑层(建立业务逻辑层(InterService)(1)建立类库项目:选择主菜单【文件】【新建】【项目】,在弹出的“新建项目”对话框中,选择“Windows”项目类型,在模板中选择“类库”,输入类库名称“InterService”,选择“添入解决方案”,单击“确定”按钮即可,效果如图13所示。(2)设置项目的程序集名称和默认命名空间:右键单击InterSe
25、rvice项目,选择属性菜单,在“属性”对话框中,将项目的程序集名称和默认命名空间均改为“LMessage3.InterService”,保存即可。图13 业务逻辑层项目ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.2 用用Visual Studio 创建三层设计架构创建三层设计架构h4建立数据访问层(建立数据访问层(AccessTask)(1)建立类库项目:选择主菜单【文件】【新建】【项目】,在弹出的“新建项目”对话框中,选择“Windows”项目类型,在模板中选择“类库”,输入类库名称“Acc
26、essTask”,添入解决方案,单击“确定”按钮即可。(2)设置项目的程序集名称和默认命名空间:右键单击AccessTask项目,选择属性菜单,在“属性”对话框中,将项目的程序集名称和默认命名空间均改为“LMessage3.AccessTask”,保存即可。数据访问层项目ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.2 用用Visual Studio 创建三层设计架构创建三层设计架构h5建立层之间的引用关系建立层之间的引用关系(1)建立表示层WebUI与业务逻辑层InterService间的依赖关
27、系:选择“WebUI”项目,选择“引用”图标,右击“添加引用”,在弹出的“添加引用”对话框中,选择“项目”选项卡,选择“InterService”项目,单击“确定”按钮即可。(2)建立业务逻辑层InterService与数据访问层AccessTask间的依赖关系:选择 “InterService”项目,选择“引用”图标,右击“添加引用”,在弹出的“添加引用”对话框中选择“项目”选项卡,选择“AccessTask”项目,单击“确定”按钮即可。项目之间的引用依赖关系ASP.NET - Spring 2015School of Computer Science & Engineering,
28、ZSC4.2 用用Visual Studio 创建三层设计架构创建三层设计架构h6分别添加实现业务逻辑层和数据访问层功能的类分别添加实现业务逻辑层和数据访问层功能的类(1)添加业务逻辑层类(LInterService.cs):在InterService项目中添加“类”,输入类名称“LInterService.cs”,单击“添加”按钮即可。类中的实现代码可参考前面介绍的“三层架构”。(2)添加数据访问层类(DBTask.cs):在AccessTask项目中,添加“类”,输入类名称“DBTask.cs”,单击“添加”按钮即可。类中的实现代码可参考前面介绍的“三层架构”。同时AccessTask项目
29、中,添加引用“System.Configuration”。ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.2 用用Visual Studio 2008创建三层设计架构创建三层设计架构h建立表示层功能的网页建立表示层功能的网页参考前面介绍的“三层架构”,建立ListMessage.aspx和PostMessage.aspx网页,后台代码略做修改即可,完成后的解决方案如图14所示。图14 完整的解决方案ASP.NET - Spring 2015School of Computer Science &am
30、p; Engineering, ZSC4.2 用用Visual Studio 2008创建三层设计架构创建三层设计架构h8编译解决方案编译解决方案通过主菜单【生成】【生成解决方案】来编译整个解决方案,编译通过后,系统自动把InterService项目和AccessTask项目所生成的.dll文件复制到WebUI项目的bin文件夹中。发布时只需发布WebUI项目。下面列出完整的代码。数据访问层DBTask类代码。业务逻辑层LinterService.cs类代码。表示层显示留言ListMessage.aspx.cs代码。表示层发送留言PostMessage.aspx.cs代码。ASP.NET -
31、Spring 2015School of Computer Science & Engineering, ZSC4.3 理解三层设计架构理解三层设计架构一般来说,根据所实现的逻辑功能,可将ASP.NET应用程序结构分为三层:表示层、业务逻辑层、数据访问层。当然也可分为N层(N3),其实N层都是三层的扩展版本。图15是一个典型的三层应用程序结构示意图。ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.3 理解三层设计架构理解三层设计架构h1表示层表示层表示层主要包括Web窗体、页面用户界面等元素
32、。它的主要任务有两项:(1)从业务逻辑层获取数据并显示。(2)实现与用户的交互,将有关数据回送给业务逻辑层进行处理,其中可能包括数据验证、处理用户界面事件等。表示层的价值在于,它把业务逻辑层和外部刺激(用户输入、激发事件等)隔离开来,这样到达业务逻辑层的请求看起来都是一样的。另外,表示层重点表达的是用户的兴趣和利益,为应用程序的交互提供各种形式的帮助,包括有益的提示、用户偏好设置等。h2业务逻辑层业务逻辑层业务逻辑层包含了核心业务相关的逻辑,它们实现业务规则和业务逻辑,并且完成应用程序允许所需要的处理。作为这个过程的一部分,业务逻辑层负责处理来自数据存储的数据或者发送给数据存储的数据。ASP.
33、NET - Spring 2015School of Computer Science & Engineering, ZSC4.3 理解三层设计架构理解三层设计架构h3数据访问层数据访问层数据访问层包含数据存储和与它交互的组件或服务。这些组件和服务在功能上和业务逻辑层相互独立。综上所述,数据层从数据库中获得原始数据,业务层把数据转换成符合业务规则的有意义的信息,表示层把信息转换成对用户有意义的内容。同时,上层可以使用下层的功能,而下层不能使用上层的功能。一般下层每个程序接口执行一个简单功能,而上层通过有序地调用下层的程序来实现特定功能。层次体系就是以这种方式来完成多个复杂的业务功能的。
34、另外,关于三层架构提醒大家注意三点:(1)在一个ASP.NET应用中,并不是只要含有aspx网页文件、DLL程序集文件、数据库文件就是三层架构的Web应用程序。(2)也并不是不含有数据库文件就不是三层架构。(3)另外,也并不是解决方案中有3个项目就是三层架构的Web应用程序。ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.4 引入实体项目的三层设计架构引入实体项目的三层设计架构前面介绍的三层架构应用中,表示层使用DataSet数据集对象来绑定数据绑定控件,例如,在显示留言的类文件ListMessag
35、e.aspx.cs中代码如下:this.m_aspLMessage.DataSource = (new LInterService().ListLWord();this.m_aspLMessage.DataBind();在网页文件ListMessage.aspx中部分代码如下: , ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.4 引入实体项目的三层设计架构引入实体项目的三层设计架构h1缺乏抽象缺乏抽象由于DataSet与数据库结构之间存在严重的耦合关系,因此,在使用DataSet的代码中,很难抽
36、象出数据库的核心组件,即无法去除与数据库结构的耦合。例如,在数据访问层中若使用下面的SQL语句获取数据库中的数据:SELECT FromUser,PostTime,TextContent FROM LWord返回的DataSet与数据库结构相同,而在表示层的网页中,绑定字段所需代码如下: h2弱类型弱类型由于DataSet是弱类型(非强类型),有些错误在编译时查不出来。例如,下面代码实现在DataSet对象ds中检索值:Int au_id = convert.ToInt32(ds.tables(0).Rows0au_id)ASP.NET - Spring 2015School of Compu
37、ter Science & Engineering, ZSC4.4 引入实体项目的三层设计架构引入实体项目的三层设计架构h3非面向对象非面向对象DataSet虽然是对象,但它仅仅支持数据存储,开发人员不能为它添加功能,如添加安全地获取表的方法,使用DataSet将意味着失去所有面向对象的优点。解决上述问题的常用方法就是在解决方案中,将这些数据封装成一个强类型的业务实体对象(而不是被封装成DataSet、DataView等对象),并且使用字段的形式存储,使用属性的形式将数据公开,各层都可以访问该实体对象。实际上业务实体相当于一个协议,各层遵循该协议进行输入、输出,输入、输出的是业务实体对
38、象,不再是DataSet。ASP.NET - Spring 2015School of Computer Science & Engineering, ZSC4.4 引入实体项目的三层设计架构引入实体项目的三层设计架构业务实体的构建需要考虑两方面的问题:一是如何实现逻辑映射,将关系数据映射到业务实体;二是如何对业务实体进行编码。下面分别给出相关的建议。h1实现逻辑映射的建议实现逻辑映射的建议(1)多花时间分析应用需求和逻辑业务实体,然后为其建立模型。接着考虑业务实体的创建问题,而不要为每个数据表都定义单独的业务实体。可以使用UML建模。(2)不要定义单独的业务实体来表示数据库中的多对多表,可以通过在数据访问组件中实现的方法来公开这些关系。(3)如果需要实现返回特定业务实体类型的方法,建议把这些方法放在该类型对应的数据访问组件中。(4)数据访问组件通常访问来自单一数据源的数据,当需要聚合多个数据源的数据时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 气象、水文仪器及装置项目安全风险评价报告
- 复方芩兰口服液项目风险评估报告
- 苏州科技大学《建筑安装工程概预算》2023-2024学年第二学期期末试卷
- 福建医科大学《能源动力》2023-2024学年第二学期期末试卷
- 商洛学院《建筑装饰材料与工程概预算》2023-2024学年第二学期期末试卷
- 广西农业工程职业技术学院《SPSS软件运用》2023-2024学年第一学期期末试卷
- 云南商务职业学院《药事法规》2023-2024学年第一学期期末试卷
- 四川省成都市双流棠湖中学2025届高三(二模)生物试题试卷含解析
- 郯城县2025届小升初总复习数学测试卷含解析
- 浙江省衢州市江山市2025届五年级数学第二学期期末质量检测模拟试题含答案
- 肝脏结核CT表现课件
- 设备周期保养检修记录表
- 中国大学生心理健康量表(CCSMHS)
- 专利法全套ppt课件(完整版)
- GB∕T 3639-2021 冷拔或冷轧精密无缝钢管
- 西师版六年级下册数学第五单元 总复习 教案
- 色谱、质谱、联用
- 独生子女父母退休一次性奖励审批1
- 铝合金窗陕西银杉节能门窗有限责任公司铝合金制作及安装工艺流程图
- 苏教版小学数学四年级下册《图形旋转》练习题
- 烧结普通砖、多孔砖回弹计算
评论
0/150
提交评论