基于ASPNET的博客系统的设计与实现_第1页
基于ASPNET的博客系统的设计与实现_第2页
基于ASPNET的博客系统的设计与实现_第3页
基于ASPNET的博客系统的设计与实现_第4页
基于ASPNET的博客系统的设计与实现_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 tml 基于基于 ASP NET 的博客系统的设计与实现的博客系统的设计与实现 摘摘要要基于 Microsoft Net 环境的 ASP NET 技术 为开发功能强大的动态网站提供了一种 简单 高效的途径 该博客系统以 ASP NET 为开发技术 使用 C 为开发语言 实现了博 客网站的动态管理 使得对博客信息的管理更加及时 高效 提高了工作效率 同时对系 统的背景需求 系统的功能特点和设计方案进行了介绍 该文还以随笔管理为例 对 ASP NET 环境下的 MVC 开发模式进行了简单的介绍 关键字关键字ASP NET ADO NET 博客 系统 数据库 引言引言 博客 数字生活新时尚 通过文字 图片 声音 视频 无线等 尽情展示自我 分 享感受 参与交流 美好你我生活 Show you share me 人人都可以博客 人人都需要博客 1 项目背景项目背景 博客 一词是从英文单词 Blog 翻译而来 Blog 是 Weblog 的简称 而 Weblog 则是由 Web 和 Log 两个英文单词组合而成 Weblog 就是在网络上发布和阅读的流水记录 通常 2 称为 网络日志 简称为 网志 它是继 Email BBS IM 之后出现的第四种全新的网络 交流方式 它绝不仅仅是一种单向的发布系统 而且有着极其出色的交流功能 另外 Blog 也提供了非常方便实用的个性化功能 简言之 Blog 就是以网络作为载体 简易迅速便捷 地发布自己的心得 及时有效轻松地与他人进行交流 再集丰富多彩的个性化展示于一体 的综合性平台 2 需求分析需求分析 2 1 需求调研 任何一个系统的开发 必然有其需求者 博客系统也不例外 本系统通过对互联网中 的各个博客系统的分析 得出从以下几个方面进行调研 1 收益需求 描述系统的商业需求和系统将带来的收益 2 日常功能 亲身体验一个博客在系统中如何交互 然后记录下来 3 通过论坛来了解各博客用户的需求 记录下各论坛中各博客用户对博客的要求 记录 4 制作邮件调查表 通过调查表的形式得出一些具体的书面信息 了解细节 2 2 创建用例图 博客系统参与者 如图 1 用户 博客管理员博客访问者系统管理员 图 1 博客系统参与者 博客系统用例 如图 2 3 用户 博客访问者 系统管理员博客管理员 管理博客账号 删除博客内容 阅读博客内容 用户登录 修改账号信息 浏览博客目录 发表评论 管理博客内容 图 2 博客系统用例图 2 3 详细描述用例 举例 用户登录用例如表 1 所示 表 1 用户登录用例表 用例名称用户登录 用例 IDUC 11 参与者用户 管理员 描述用户登录系统过程 风险低 优先级高 难度低 启动主动进入用户登录画面或会话超时转入用户登录画面 前置条件用户需在登录状态 后置条件将用户信息放入会话中 将用户相关的博客信息放入会话中 显示博客阅读主画面 主事件流 用户系统 4 1 进入或转入用户登录画 面 2 用户输入用户名和密码3 系统检查用户和密码是否合法 4 系统检查用户是否存在 密码是否正确 5 读取用户的基本信息 博客的基本信息放入会话中 6 转到管理博客的主画面 异常流 异常流系统中不存在该用户或用户名错误 系统转入登录画面 异常用户不存在或者密码错误 用户登录用例图如图 3 所示 填写用户名 密码 验证用户名 密码 进入登录前的界面 储存博客账号信息 提示用户登录失败 图 3 用户登录用例图 3系统分析系统分析 3 1 系统中的对象 面向对象的开发的基石是对象 那么分析一个系统的开始就是从确定对象开始 那么 这个系统重要的实体对象有 博客账户信息 用户 标题 用户名 密码 分类 文章 链接 评论 随笔 图片 而必须的对象有 文章 图片 随笔 链接 博客账号 分类 5 评论 3 2 开发技术分析 本系统采用 ASP NET 开发技术进行开发 ASP NET 不仅仅是 ASP 的一个新版本 更 是 Web 应用程序编程方面的一个全新的概念和方法 ASP NET 中的新功能并不是对 ASP 的改进 设计它的初衷是为用户入境提供最佳的应用程序架构 它相比于 ASP 有着以下几 个方面的优点 1 多语言 ASP 曾在脚本引擎方面受到了限制 特别是 VBScript 和 Jscript 而 ASP NET 则支持 多种语言 默认情况下为 Visual Basic NET C 和 Jscript NET 另外还支持一些第三方语 言 2 服务器处理 ASP 在服务器处理上不管页面的内容是纯 HTML 还是 ASP 生成的 HTML 它都是按 照页面顺序显示的 因此逻辑代码依赖于它在页面中的位置 并且无法将 HTML 控件作为 目标 除非将它们作为流的一部分进行显示 而 ASP NET 就解决了这个问题 方法是为控 件引入一个声明的基于服务器的模型 因为控件在服务器上有 可以在服务器上编程 也 可以是客户端驱动的事件 3 Web Form 控件 将现有的 HTML 控件转换为服务器端的控件是比较容易的 但是也存在一些不方便 例如比较难于区分 HTML 控件和服务器端的控件 于是 Microsoft 公司就创建了一组专门 的服务器控件 它们都用 asp 前缀标识 4 代码与内容分离 一个网站的设计与开发往往由不同的人来实现的 而 ASP 中就是存在着这样一个问题 代码 ASP 脚本 和内容 HTML 混合在一起 这样就使得同时进行设计和开发变得很 困难 而 ASP NET 则采用了代码内联和后台编码两种方法实现了代码与内容的分离 3 2 健壮性分析 举例 下面以对博客系统的用户登录用例为例进行健壮性分析 3 3 1事件流分析 事件流分析主要是针对系统中的用例描述中关于事件流的部分进行分析 此外还必须 6 综合考虑基本路径和扩展路径两方面 3 3 2边界对象分析 边界对象 通常是用来完成参与者 用户 外部系统 与系统之间交互的对象 在用户登录这个用例中 由于不存在外部系统 而且参与者也只有一个 就是 用户 因此它的边界对象有 1 用户进入登录画面 2 转到管理博客的主画面 3 3 3实体对象分析 实体对象 通常来自域模型 也就是现实世界 用来描述具体的实体 通常映射到数 据库表格与文件 这个用例的实体对象包括用户和博客账号信息 3 3 4控制对象分析 控制对象 主要用来体现应用程序的执行逻辑 将其抽象出来 可以使得程序不影响 用户画面和数据库中的表 这个用例的控制对象有 检测博客账号的合法性 3 4 交互设计 3 4 1引入实体对象 根据健壮性分析 可以把实体对象给罗列出来 这些对象通常也是每个类的一个实例 由于是用来描述运行时状态的情况 因此是对象 而非类 3 4 2引入边界对象和参与者 将实体对象引入之后 再就是将边界对象找出来 在交互设计中引入参与者和边界对 象 3 4 3引入控制对象 将参与者 边界对象均引入之后 再就要结合健壮图中的控制对象 以及用例描述中 的事件流来确定对象之间的消息传递 3 4 4添加类的属性与方法 在交互设计中 将会发现类应该具有的方法 也会在设计中找到一些新的属性 而这 些东西将近一步地完善交互设计 结合健壮分析 交互设计时引入设计类 并添加相应的 属性与方法 7 3 4 5引入基础类 在着手开发之前 有一件很重要的事 那就是引入基础类 不管用什么样的开发工具 进行代码编写 都将以各种库函数 框架作为开发基础 因此首先根据应用的需要选择相 应的框架 然后再根据具体的局部需要选择相应的类库 这个系统中要进行数据库操作 可使用 NET Framework 的 ADO NET 进行数据库操作 在进行文本编辑时使用文本编辑 引入第三方控件 使用 FreeTextBox 编辑器 在进行分页时 同样引入第三方控件 使用 AspNetPager 分页控件 由于这些第三方控 件均是开放源码的 所以我们自己可以在开发的过程中对控件进行自己的改动 既有效又 方便 需要将这些类库 控件引入到工程中 4 代码实现代码实现 4 1 编码之前的工作 4 1 1在 visual 中创建解决方案 在 Visual 中 系统的开发主要是以解决方案的形式解决 所以我们在开发这 个博客系统前 首先要先创建一个解决方案 命名为 MyBlog 4 1 2文件夹的规划 在一个 Web 项目中 文件夹也需要进行规划 通常包括 ASP NET 页面 图片 样式 文件 Flash 动画等元素 需要把它们放置到不同的文件夹 才能很好地管理文件 那么该 系统的文件夹规划方式为 1 Core 文件夹下存放工程的类文件 2 根目录下只存放 Default aspx 文件 根目录下的 Images 下存放与 Default aspx 文件相关 的图片 3 ASP NET 页面需要按模块旋转到各文件夹 相关的图片放置到模块文件夹下面的 Images 文件夹下 4 样式文件放置到根目录下的 Images 文件夹下 4 2 MVC 模式模式 8 4 2 1什么是 MVC 模式 MVC 由 Trygve Reenskaug 提出 首先被应用在 SmallTalk 80 环境中 是许多交互和画 面系统的构成基础 MVC 结构是为那些需要为同样的数据提供多个视图的应用程序而设计 的 它很好地实现了数据层与表示层的分离 MVC 作为一种开发模型 通常用于分布式应 用系统的设计和分析 以及用于确定系统各部分间的组织关系 对于画面设计可变性的需 求 MVC Model View Controller 把交互系统的组成分解成模型 视图 控制器 3 种部 件 1 视图部件把表示模型数据及逻辑关系和状态的信息以特定形式展示给用户 它从模型 获得显示信息 对于相同的信息可以有多个不同的显示形式或视图 2 控制器部件是处理用户与软件的交互操作的 其职责是控制提供模型中任何变化的传 播 确保用户画面与模型间的对应联系 它接受用户的输入 将输入反馈给模型 进而实 现对模型的计算控制 是使模型和视图协调工作的部件 3 模型部件保存由视图显示 由控制器控制的数据 它封装了问题的核心数据 逻辑和 功能的计算关系 它独立于具体的画面表达和 I O 操作 模型 视图与控制器的分离 使得一个模型可以具有多个显示视图 如果用户通过某 个视图的控制器改变了模型的数据 所有其他依赖于这些数据的视图都应反映了这些变化 因此 无论何时发生了何种数据变化 控制器都会将变化通知所有的视图 导致显示的更 新 这实际上是一种模型的变化 传播机制 4 2 2ASP NET 模式下如何实现 MVC ASP NET 提供了一个很好的实现这种经典设计模式的类似环境 开发者通过在 ASPX 页面中开发用户接口来实现视图 控制器的功能在逻辑功能代码 cs 中实现 模型通常 对应应用系统的业务部分 在 ASP NET 中实现这种设计而提供的一个多层系统 对较经典 的 ASP 结构实现的系统来说有明显的优点 将用户显示 视图 从动作 控制器 中分离 出来 提高了代码的重用性 将数据 模型 从对其操作的动作 控制器 分离出来 可 以让用户设计一个与后台存储数据无关的系统 就 MVC 结构的本质而言 它是一种解决 耦合系统问题的方法 4 3 用户组件和样式的设计 博客系统中存在很多相同或相似的元素 这些元素可能是页面的标题 可能是页面的 版权声明 也可能是文章的列表或是登录信息框 需要寻找一种方式在整个系统中共享 9 而不需在变化时修改所有的页面 所以就采用了样式文件进行管理以及用户自定义组件 4 3 1使用统一样式表 在样式文件中主要对以下五个内容进行定义 1 博客标题 它是博客随笔 文章标题 图片名称的样式定义 2 博客内容 它是博客内容 文章内容的样式定义 3 博客版权信息 它是博客系统的页面下方显示博客系统的版权信息的样式定义 在 Footer 用户控件中使用 4 导航栏 它是博客系统上方导航栏的样式定义 在 Header 用户控件中使用 5 输入框 它是博客系统表单元素的样式定义 4 3 2 设计用户控件 ASP NET 为开发人员提供了用户控件这一新技术来实现 Web 元素的共享 开发人员可 以通过 Visual Studio Net 进行 Web 元素的外面的开发 同时可以通过 Web 元素后台代码的 方式进行表现层的开发 在这个博客系统中 使用了 Header Footer 等用户控件 4 4 数据库设计 博客系统中的数据管理形式采用数据库 根据系统需要与数据规范化分为博客账 户信息表 blog 博客文章信息表 Article 博客随笔信息表 Essay 博客类别表 Category 博客评论表 FeedBack 博客链接表 Href 博客图片表 Picture 这七个表 表结构分别如下 表 2博客账户信息表 blog 列名数据类型长度允许空备注 BlogIDInt4没有实际意义 作为该表主键存在 SubjectNvarchar50Null博客的名称 UsernameNvarchar50Null博客的用户名 PasswordNvarchar50Null博客的密码 DescriptionNvarchar100Null博客的描述 EmailNvarchar200Null博客的电子邮箱 EntrynumInt4Null博客的每页文章显示数量 10 NameNvarchar50Null角色名称 RoleInt4Null角色 EssaycountInt4Null随笔数 ArticlecountInt4Null文章数 FeedbackcountInt4Null评论数 表 3博客文章信息表 Article 列名数据类型长度允许空备注 ArticleIDInt4文章表的主键 SubjectNvarchar50Null文章标题 ContentNtext16Null文章内容 CategoryIDInt4Null文章所属分类号 BlogIDInt4Null文章所属博客号 TimeNvarchar50Null发表时间 ViewInt4Null查看次数 FeedbackInt4Null评论数 表 4博客随笔信息表 Essay 列名数据类型长度允许空备注 EssayIDInt4随笔表的主键 SubjectNvarchar50Null随笔标题 ContentNtext16Null随笔内容 CategoryIDInt4Null随笔所属分类号 BlogIDInt4Null随笔所属博客号 TimeNvarchar50Null发表时间 ViewInt4Null查看次数 FeedbackInt4Null评论数 表 5博客类别表 Category 列名数据类型长度允许空 备注 CategoryIDInt4主键 NameNvarchar50Null类别名称 11 BlogIDInt4Null类别所属的博客号 TypeNvarchar10Null类别所属博客类型 DescriptionNvarchar500Null该类别的描述 表 6博客评论表 FeedBack 列名数据类型长度允许空备注 FeedBackIDInt4评论号 主键 SubjectNvarchar50Null评论标题 ContentNtext16Null评论内容 BlogIDInt4Null针对评论的博客号 CategoryIDInt4Null该评论的博客类别号 ContentIDInt4Null针对博客标题评论的内容号 CategoryNvarchar50Null评论所属类别 TimeNvarchar50Null发表评论的时间 UsernameNvarchar50Null评论人姓名 UrlNvarchar100Null评论人邮箱 表 7博客链接表 Href 列名数据类型长度允许空备注 HrefIDInt4链接号 主键 NameNvarchar50Null链接名字 UrlNvarchar200Null链接 CategoryIDInt4Null链接所属类别号 BlogIDInt4Null链接所属博客号 表 8博客图片表 Picture 列名数据类型长度允许空备注 PictureIDInt4图片号 主键 ImageUrlNvarchar200Null图片链接 SubjectNvarchar50Null图片标题 CategoryIDInt4Null图册号 BlogIDInt4Null图片所属博客号 12 4 5 系统实现 4 5 1系统结构图 根据前面的需求分析可以得出以下的系统结构图 博客系统 后台管理 阅读博客 系统管理 随笔管理 文章管理 评论管理 链接管理 图片管理 账户管理 密码管理 密码管理 图 4系统结构图 各界面如下 1 阅读博客 图 5阅读博客界面 13 2 随笔管理 文章管理 评论管理 链接管理 图片管理均类似 图 6随笔管理界面 后台管理的密码管理界面 图 7后台管理的密码管理界面 系统管理主界面 14 图 8系统管理主界面 系统管理的账户管理界面 图 9账户管理界面 系统管理的密码管理界面同后台管理 如图七 4 5 2代码实现 整个系统的代码实现均采用表现层 控制层 数据层来实现 并且定义了一个抽象类 DBObject 类 其它一些类均由这个类继承 具体实现的过程是用户在页面 表现层 激发 事件 那么页面的后台代码 控制层 作出回应 根据事件的不同来调用数据层对数据库 进行操作 15 以下以随笔管理为例来说明 ASP NET 的代码实现 1 实现表现层 图六所示即为随笔管理列表页面 它的代码在 Blog Admin Essay Essay aspx 中 这个页面由三大部分组成 标头与导航栏做成了用户控件 在左右的功能区中 左下角的 分类列表是由一个列表控件 Datalist 捆绑数据后生成的 用到了 ItemTemplate 模板 ItemTemplate 模板代码如代码 1 代码 1ItemTemplate 模板 页面的中右区为随笔信息列表 这也是由 Datalist 列表控件绑定数据后生成的 这里不仅 定义了 ItemTemplate 还定义了 HeaderTemplate 模板 AlternatingItemTemplate 模板 SeparatorTemplate 模板和 FooterTemlplate 模板 如代码 2 所示 代码 2DataList 列表控件绑定数据 标题 分类浏览人数评论人数 操作 由于 DataList 不像 DataGrid 有自动分页的功能 所以我在这个系统中引入了一个第三 方控件 AspNetPager 进行分页管理 首先声明控件 然后在页面中插入分页控件 如代码 3 代码 3分页控件 2 实现控制层 由于随笔管理页面两次使用了 DataList 控件 所以要对 DataList 控件进行数据绑定 于是添加一个 BindData 方法来处理数据捆绑过程 里面定义的两个参数 BlogID 和 CategoryID 分别为博客的编号和分类的编号 用来确定当前显示的是哪个博客中哪个分类 中的随笔内容 程序如代码 4 代码 4随笔数据绑定 private void BindData int BlogID int CategoryID DataSet cDs cDAO LoadList BlogID e cDs Tables 0 Columns Add CategoryStr for int i 0 i cDs Tables 0 Rows Count i cDs Tables 0 Rows i CategoryStr cDs T ables 0 Rows i Name ToString this essayCategory DataSource cDs Tables 0 DefaultView this essayCategory DataBind DataSet eDs eDAO LoadList BlogID CategoryID pager PageSize pager CurrentPageIndex 1 pager PageSize eDs Tables 0 Columns Add Category eDs Tables 0 Columns Add Info eDs Tables 0 Columns Add Edit eDs Tables 0 Columns Add Remove for int i 0 i eDs Tables 0 Rows Count i eDs Tables 0 Rows i Category cDAO Load Convert ToInt32 eDs Tables 0 Rows i CategoryID Name eDs Tables 0 Rows i Info 浏览 eDs Tables 0 Rows i Edit 修改 eDs Tables 0 Rows i Remove 删除 essayList DataSource eDs Tables 0 DefaultView essayList DataBind pager CustomInfoText 共 pager PageCount ToString 页 当前为第 pager CurrentPageIndex ToString 页 这里面使用了数据库操作对象 CategoryDAO 的 LoadList 方法获取了 DataSet 对象对分 类列表进行绑定 而用创建的随笔数据库操作对 EssayDAO 的 LoadList 方法生成随笔的列 表 3 实现数据层 在随笔管理的绑定的控制层中要使用到数据层的操作类 如 EssayDAO 的 LoadList 方 法 它在 Blog Core Essay EssayDAO cs 文件中 代码 5随笔数据层类 public EssayVO Load int id Connection Open SqlCommand sqlComm new SqlCommand select from Essay where EssayID id Connection SqlDataReader tmpReader sqlComm ExecuteReader EssayVO essayVO new EssayVO if tmpReader Read essayVO EssayID Convert ToInt32 tmpReader EssayID ToString essayVO BlogID Convert ToInt32 tmpReader BlogID ToString essayVO Subject tmpReader Subject ToString 19 essayVO Content tmpReader Content ToString essayVO Time tmpReader Time ToString essayVO View Convert ToInt32 tmpReader View ToString essayVO FeedBack Convert ToInt32 tmpReader FeedBack ToString tmpReader Close Connection Close return essayVO EssayDAO 是 DBObject 的子类 它完成了 EssayVO 对象的基本方法 包括对 EssayVO 对象的创建 修改 删除 选取和列表方法 以下是 DBObject 子类的代码及 EssayVO 类的代码 代码 6DBObject cs public class DbObject protected SqlConnection Connection private string connectionString public DbObject connectionString System Configuration ConfigurationSettings AppSettings sqlConnection Connection new SqlConnection connectionString protected string ConnectionString get return connectionString 20 代码 7EssayVO cs public class EssayVO private int essayID private string subject private string content private string time private int view private int feedBack private int categoryID private int blogID public int EssayID get return essayID set essayID value public string Subject get return subject set subject value public string Content get return content set content value public string Time get return time set time value 21 public int View get return view set view value public int FeedBack get return feedBack set feedBack value public int CategoryID get return categoryID set categoryID value public int BlogID get return blogID set blogID value 4 5 2 4实现小结 MVC 模式下的代码实现正是基本如随笔管理所示 分为多层进行实现 在表现层根据 分类以指定表格的形式显示随笔 必要时可分页 当用户在表现层选择相应操作时通过控 制层进行控制 如果需要调用数据库 则控制层通过调用数据层对数据库进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论