版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ASP.NET 4.0网站建设基础教程主编:王 翔第九章 项目实践之三层架构新闻发布系统企业级数据库系统通常需要跟随企业业务的变化而变化,所以在设计与开发初期就要考虑其数据体系结构的合理性、灵活性、健壮性,从而既能满足企业级应用的复杂需求也能为今后系统的调整和升级留有余地,减少系统维护的开销和难度。本章就将以一个基于三层架构模式搭建的新闻发布系统作为入手实践案例,简要介绍如何进行企业级数据库系统的开发。9.1 三层架构概述9.1.1 二层架构及其局限性二层架构模式下,要求Web应用程序开发与设计人员必须兼具美工、代码编写、数据库基础连接方法等一系列背景知识,同时开发出的程序存在着很多局限性,一
2、旦用户的需求发生变化,应用程序就需要随之进行大量修改,甚至重新开发,给系统的维护和升级都带来了极大的不便。而企业级应用程序的业务规则比较丰富,往往要求高灵活性和高可维护性,二层架构模式由于自身的局限性已不能满足其需求,三层架构模式则因其“高内聚、低耦合”的特性应运而生。9.1.2 什么是三层架构所谓三层架构,是指在客户端与数据库之间人为地加入了一个“中间层”,也叫组件层。通用的三层架构模型如图所示。通常,中间层又会被划分成业务逻辑层(Business Logic Layer,简称BLL)、数据访问层(Database Access Layer,简称DAL)和数据对象模型层(Database O
3、bject Model Layer,简称Model)。9.1.3 三层架构的优越性三层架构主要体现出了对程序分而治之的思想:数据访问层只负责提供对数据的操作,并不需要了解上层业务逻辑;业务逻辑层调用数据访问层提供的方法自定义一些业务逻辑,对数据进行加工,本身不需要了解数据访问层的实现;表示层直接调用业务逻辑提供的方法将数据呈现给用户。三层架构的最突出的特点在于不必为了业务逻辑上的微小变化而迁至整个程序的修改,只需要修改业务逻辑层中的某些方法,增强了代码的可重用性,便于不同工作领域的开发人员“协同作战”,只要遵循事先制定的接口标准就可以进行并行开发了,最终只要将各个部分拼接到一起即可构成最终的W
4、eb应用程序。2打开“文件”菜单新建项目其他项目类型Visual Studio解决方案空白解决方案,输入名称并指定存放路径。3在解决方案上单击右键添加新建项目Visual C#类库,命名为“Model”,系统会生成一个class1.cs文件,将其重命名为News.cs。打开文件,在News类中输入以下代码:public News() private string title;/ 设置新闻标题属性public string Title set title = value; get return title; 可以看到,实体类的代码非常简单,仅仅是将数据表字段以“属性”的方式重新表示,主要负责在层
5、之间传递数据,不包含任何逻辑性内容。4重复第3步的操作,添加“DAL”类库(数据访问层),添加完成后,将class1.cs文件重命名为NewsDAO.cs,并在NewsDAO类中添加如下代码:public bool addNews(News n) / 通过web.config文件中的节获取查询字符串 string connStr = System.Configuration.ConfigurationManager.ConnectionStringsConnectionString.ToString(); SqlConnection conn = new SqlConnection(connS
6、tr); conn.Open(); / 将News实体类的Title属性值插入数据表,并返回是否成功的标志 string sql = insert into News (title) values (title); SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.AddWithValue(title, n.Title); if (cmd.ExecuteNonQuery() 0) conn.Close(); return true; else conn.Close(); return false; 6在解决方案上单击右键添加新
7、建网站ASP.NET 空网站,Web位置选项选择“文件系统”,选择一个路径并以“WebUI”为名存储网站。7在网站的web.config配置文件配置节中添加如下内容: 8在Default.aspx页面中添加一个TextBox控件及一个Button控件,并修改TextBox控件的“id”属性为“tbTitle”、修改Button控件的“Text”属性为“添加”。9双击Button控件,在控件的单击事件过程中加入如下代码:Model.News n = new News();n.Title = tbTitle.Text.ToString();BLL.NewsManager nm = new News
8、Manager();if (nm.addNews(n) Response.Write(插入成功);else Response.Write(插入失败);同之前的操作一样,在文件的顶部需要加入命名空间的引入:using BLL;using Model;10至此,这个简单的三层架构实例就搭建完毕了。按【Ctrl+F5】键运行页面,在文本框中输入新闻标题,点击添加,当页面输出“成功”时,打开数据库的News表验证结果,如图所示。9.2.2 数据库设计1. 添加数据表2. 添加触发器当删除新闻类别时,应首先删除该类别下所有新闻的评论,然后删除该类别下的所有新闻,最后删除新闻类别。此时可以考虑使用触发器应
9、对这种级联式删除,具体操作为:打开“服务器资源管理器”,然后右击“category”表选择“添加新触发器”,在触发器窗口中用如下代码替换原有代码。ALTER TRIGGER dbo.trigCategoryDelete ON dbo.category instead of DELETEAS BEGINdeclare caId intselect caId=id from deleted- 删除评论delete comment where newsId in (select newsId from news where caId=caId)- 删除新闻delete news where caId
10、=caId- 删除类别delete category where id=caIdEND(1)根据类别编号查找新闻ALTER PROCEDURE dbo.news_selectByCaId caid intASBEGINselect n.id,n.title,n.createTime,,n.caId from news n inner join category c on n.caId = c.id and n.caId=caidorder by n.createTime descEND(2)根据新闻内容关键字查找新闻(根据新闻标题关键字查询与其类似)ALTER PROCEDURE
11、dbo.news_selectByContentcontent varchar(1000)ASBEGINselect top 10 n.id,n.title,n.createTime,,n.caId from news n inner join category c on n.caId = c.idwhere n.content like %+content+%order by n.createTime descEND(3)选取新闻评论数最多的前5条新闻作为热点新闻ALTER PROCEDURE dbo.news_selectHotNewsASBEGINselect top 5 n
12、.id,n.title,n.createTime,,count(com.id) as comCount,c.id as caIdfrom news n inner join category c on n.caId = c.idleft join comment com on com.newsId = n.idgroup by n.id,n.title,n.createTime,,c.idorder by comCount descEND9.2.3 Model层(实体层)的设计Model层里面的每一个类都对应数据库里面的一张表,类里面的每一个属性则对应表中的一个字段。每
13、个属性都有自己的get和set方法,项目中的数据存取就是依靠get和set方法实现的。确切的说,Model不属于纵向中的哪一层,而是所有层都要用到的业务实体层,其最主要的作用就是用来在各层之间传递参数。新闻发布系统数据库中共添加了三张数据表,相应地我们就需要定义三个实体类News.cs、Category.cs及Comment.cs与其一一对应。namespace Model public class News private string id; public string Id get return id; set id = value; public News() public News(
14、string title, string content, string caid) this.title = title; this.content = content; this.caId = caid; public News(string id, string title, string content, string caid) this.id = id; this.title = title; this.content = content; this.caId = caid; 9.2.4 DAL层(数据访问层)的方法设计DAL层中的类主要用于完成用户数据的存取操作。数据访问层是与数
15、据库直接交互的层级,如:查找数据、更新数据、插入数据等等。它的上一级是BLL(业务逻辑层)。当业务逻辑层需要操作某张数据表的数据时,需要首先调用数据访问层的接口,再由数据访问层通过ADO.NET访问SQL Server数据库,并最终在表示层呈现数据。本系统中DAL层中共包含了以下四个类:SQLHelper.cs(SQL数据库助手类)NewsDAO.cs(新闻表操作类)CategoryDAO.cs(类别表操作类)CommentDAO.cs(评论表操作类)9.3 UI层(界面层或表示层)的设计9.3.1 前台界面的设计与实现1. 母版页的设计2. 内容页的设计【显示新闻内容与评论页运行效果】【搜索
16、结果展示页运行效果】3. CSS样式表的设计在进行界面设计时,我们采取了DIV层的形式进行了页面布局,DIV+CSS模式的另一核心就是设计有效的CSS样式以实现对DIV层的外观控制。* /* 把默认值都设置为0 */ margin:0; padding:0; body font-size: 14px;a:link,a:visited /* 超链接与超链接访问后的样式 */ color: #000000; text-decoration: none;a:hover /* 超链接上鼠标悬停样式 */ color: #0000FF; text-decoration: underline;#top,
17、#search, #main, #footer /* 母版页四大部分的公共样式 */ margin: 10px auto 10px auto; width: 760px;#top /* 顶部层样式 */ height: 120px; #top img /* 顶部banner样式 */ float: left; border-width: 0;#search /* 搜索层样式 */ height: 27px; width: 757px;#category /* 母版页新闻分类层样式 */ width: 180px; height: 372px !important; height: 386px;
18、 margin-right:5px; margin-bottom: 10px;#footer /*页脚样式 */ text-align: center; border-top: 1px solid #D6D7D6; padding-top: 10px; clear: left;.searchkey /* 搜索关键字文本框的样式 */ border: 1px solid #CCEFF5; background-color: #FAFCFD; height: 25px; line-height: 25px; width: 450px; font-size: 16px;.searchbtn /* 搜索按钮的样式 */ border-style: none; background-color: #FAFCFD;input /* input标记样式 */ vertical-align: middle;ul,li /* 项目列表样式 */ list-style-type:none;li text-align: center; margin: 20px;li a:link, li a:visited /*项目名称的链接样式 */color: #0066CC;text-decor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 胰腺癌患者的运动疗法
- 2026年日语发音难点剖析与纠音训练方法
- 胸痹护理要点解析
- 机构投资者与数据标注服务商合作合同
- 2026年航电维修人员噪声聋预防与听力保护
- 线上线下运营资本融资合同
- 2026年新冠肺炎疫情防控文艺作品
- 2026届高考语文复习:文言特殊句式+课件
- 招商会2026年活动场地租赁使用合同
- 2026年医疗联合体审计重点与协同发展
- GINA哮喘指南核心更新解读2026
- 2026年汽车维修前台测试题及答案
- 2026福建厦门公交集团有限公司公交招聘考试备考试题及答案解析
- 2026年职业能力倾向验-通关题库及1套参考答案详解
- 2026中国兵器审计中心(西南中心)招聘6人笔试参考题库及答案解析
- 2026云南曲靖市沾益区高投物业服务有限公司物业工作人员招聘6人笔试模拟试题及答案解析
- GB/Z 177.7-2026人工智能终端智能化分级第7部分:汽车座舱
- 2026四川泸州金桂投资有限公司第一批次招聘26人备考题库附答案详解(完整版)
- 恒丰银行北京分行社会招聘笔试模拟试题及答案解析
- 2026西藏中考语文查缺补漏专练含答案
- 工商联执委分组工作制度
评论
0/150
提交评论