毕业设计----个人博客系统的设计与实现.doc_第1页
毕业设计----个人博客系统的设计与实现.doc_第2页
毕业设计----个人博客系统的设计与实现.doc_第3页
毕业设计----个人博客系统的设计与实现.doc_第4页
毕业设计----个人博客系统的设计与实现.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计论文毕业设计论文 系部 软件学院 专业 软件技术 应用英语 题目 个人博客系统的设计与实现 指导教师 评阅教师 毕业设计毕业设计 论文论文 中文摘要中文摘要 题目 个人博客系统设计与实现 摘要 从发展之初 博客就带有双重功能 一方面它是很棒的在线写日志的工具 它可以记录个人的文章 日记或者其他一些值得记录分享的东西 另一方面博客 也是绝佳的交流工具 利用博客可以发一些重要的新闻 以最直接 最高效的方 式来与他人沟通 2000 年博客开始进入中国 并迅速发展 一直到今天博客应用都 非常广泛 现在 Web 开发的理念就是追求较好的用户体验 一般都体现在 RIA Rich Internet Application 开发上 一些老的技术已经不能满足当今 Blog 发展的需 求 利用一些新的技术如 Silverlight WCF Ajax 等来开发一个新的 Blog 系统 就是基于这样的背景 本课题的任务是利用一些新的技术来开发一套完整的 Blog 系统 主要技术有 WCF Silverlight Ajax 等 是基于 NET 3 5 的平台来开发的 整个系统是基于 传统的三层架构的一套系统 数据访问层对 ADO NET 进行了进一步封装 利用 Ioc 容器注入 反射来动态加载对象 同时利用缓存提高整个系统的整体性能 UI 层 利用了一些比较成熟的库和插件 比如 jQuery 库 FCKeditor 富文本编辑插件等 同时也利用了一些比较新的技术 如 Silverlight 整个系统界面采用 Div CSS 来设计界面 共有两套主题可供选择 最后经过测试 系统能正常运行 功能完善 性能较高 总得来说这个系统 的开发是比较成功的 关键词 博客 三层架构 WCF Silverlight 对象设计模式 缓存 毕业设计毕业设计 论文论文 外文摘要外文摘要 TitleTitle Design and Implementation of a Personal Blog System AbstractAbstract From the start The Blog has two functions first it s a useful tool who can use to write articles diary or something valuable to record and share with others second it is also a good tool to communicate with other people we can use the most direct and most efficient way to publish some latest news to communicate with other people In the year of 2000 the blog came to China and spread quickly grow rapidly until now it is also used extensively The concept of today s web develop is user s experience mainly be embodied in the RIA Rich Internet Application developing Some old technology cannot meet the today s Blog s development Base on these reasons we have to develop a new system which using some new technology for example Silverlight WCF Ajax This topic s task is to develop a new Blog system using some new technology Primary technology is WCF Silverlight Ajax and so on This project is base on the NET 3 5 This entire system is base on the three layer s architecture Data access layer encapsulate ADO NET further and load object dynamically using Ioc dependency injection and reflection The system use cache to cache data to improve performance UI layer uses some proven technique for example jQuery and FCKeditor rich text editor plugins and also uses some new technology for example Silverlight We use div css to layout the web page It has two themes After testing the entire system has a good running It is finished successfully Keywords Blog Three Layer Architecture WCF Sivlerlight Design Pattern Cache 目 录 1 绪论 1 1 1 博客概况 1 1 1 1 博客的产生 1 1 1 2 博客的现状 2 1 2 博客的发展 需求与前景 2 1 3 本论文任务概述 2 1 4 本论文章节安排 3 2 系统设计与实现 3 2 1 需求分析 3 2 1 1 功能需求 3 2 1 2 项目计划安排 3 2 2 系统开发环境 4 2 2 1 开发环境简介 4 2 2 2 Visual Studio 2008 开发环境简介 5 2 2 3 SQL Server 2005 数据库简介 5 2 3 相关技术简介 5 2 3 1 C 语言简介 5 2 3 2 ASP NET 简介 6 2 3 3 ADO NET 简介 6 2 3 4 Silverlight 技术简介 7 2 3 5 WCF 简介 7 2 3 6 jQuery 库简介 8 2 4 系统设计与实现 8 2 4 1 分层架构核心思想 8 2 4 2 实体介绍 9 2 4 3 数据库设计 10 2 4 4 实体类的设计与实现 12 2 4 5 接口设计 12 2 4 6 IoC 容器及依赖注入机制的设计 14 2 4 7 数据访问层的实现 17 2 4 8 业务逻辑层的实现 24 2 4 9 表示层的实现 26 2 4 10 视频模块的实现 28 3 系统功能演示 30 3 1 系统功能演示 30 3 2 小结 36 1 1 1 绪论绪论 忽如一夜春风来 上网 突然成了很 cool 的事 网上影院 伊妹儿 QQ 黑 客 越来越多的网络语言融入了我们的日常用语 网络成了我们生活一部分 电脑起源 于二战 而网络则不折不扣的起源于冷战 网络的正常稳定发展是从 1995 年以后 从 1995 年到至今 短短的十几年间 Internet 进入了全速发展时期 它已经成为我们生活中 不可缺少的重要一环了 Internet 规模逐日扩大 人们对网络速度的要求也越来越高 信息的获取 处理 交 流和应用能力 已经成为人们最重要的能力之一 而在网络上 发布 查看相关信息的方式 也越来越多 比如门户网站 新闻组 电子邮件 还有最近几年流行起来的 BBS 博客 播客 贴吧等等 博客是一种基于互联网分享个人心得及其他一些个人认为是有用信息的 方式 从发展之初 博客就带有双重功能 一方面它是很棒的在线写日志的工具 另一方 面也是绝佳的交流工具 1 11 1 博客概况博客概况 1 1 1 博客的产生 博客 这个词 最早起源于中国 史学界普遍认为最早来自于中国秦代 当时张良 为了刺杀秦始皇 找到一位侠客 并选定博浪沙作为刺杀地点 结果刺杀失败 但大秦帝 国还是被这一突发事件所震惊 纷纷在第一时间予以报道 无数竹简在驿道上往返奔驰 上面的新闻只刻着一行朱色的篆字 博浪沙之侠客 由此可见 博客 的最初含义是 指突发性大事件 后来这个词的意义被进一步引申 代指 值得一看的东西 另人震惊 的事件 或 富有新闻价值的言论 最古老的博客原型是 NCSA 的 What s New Page 网页 主要是罗列 Web 上新兴的网 站索引 这个页面从 93 年 6 月开始 一直更新到 1996 年 6 月为止 但是最早的博客是 Userland 公司 CEO Dave Winer 在 1997 年开始运作的 Scripting News 开始真正具备了博 客的基本重要特性 并且他将这些功能集成到免费软件 Frontier 脚本环境 不过 这 个算不算是真正的最早博客 争议颇多 有人认为 从形式上说 是 Jorn Barger 于 1997 年底建立了今天博客网站的基本模样 当时的原始模样可以上网看到 网管人员使用 log log files 来指称 系统记录文件 因此几年前如果用 google 来查 weblog 查出 来大多都是例如 Seacloak 这种网站流量分析软件 而不像今天真正的 weblog 2 1 1 2 博客的现状 博客 Blog 在中国的发展历程始于 1998 年 但到了 2000 年才开始真正流行 而 2000 年博客开始进入中国 并迅速发展 但都业绩平平 直到 2004 年木子美事件 才让 中国民众了解到了博客 并运用博客 2005 年 国内各门户网站 如新浪 搜狐 原不看 好博客业务 也加入博客阵营 开始进入博客春秋战国时代 起初 Bloggers 将其每天浏 览网站的心得和意见记录下来 并予以公开 来给其他人参考和遵循 但随着 Blogging 快 速扩张 它的目的与最初已相去甚远 目前网络上数以千计的 Bloggers 发表和张贴 Blog 的目的有很大的差异 不过 由于沟通方式比电子邮件 讨论群组更简单和容易 Blog 已 成为家庭 公司 部门和团队之间越来越盛行的沟通工具 因为它也逐渐被应用在企业内 部网络 Intranet 1 21 2 博客的发展 需求与前景博客的发展 需求与前景 2001 年 9 月 11 日 世贸大楼遭遇恐怖袭击 博客成为重要信息和灾难亲身体验的重 要来源 从此 博客正式步入主流社会的视野 正是这场恐怖的袭击 使人们对于生命的 脆弱 人与人沟通的重要 最即时最有效的信息传递方式 有了全新的认识 从发展之初 博客就带有双重功能 一方面它是很棒的在线写日志的工具 它可以记 录个人的生活 以文字形式展现自我 同时也能让网络上的其他人来了解自己 博客就是 一个展示自我的舞台 另一方面博客也是绝佳的交流工具 利用博客可以发一些重要的新 闻 以最直接 最高效的方式来与他人沟通 正如世贸大楼遭遇恐怖袭击事件 网络成为 第一个事件信息的来源 由此可见博客的重要性 开发一个个人博客系统 就是基于这样一 个想法 通过各种方式来展现自我 与他人沟通 1 31 3 本论文任务概述本论文任务概述 这个毕业设计的最终目标是设计 实现一个功能完善的个人博客系统 这个系统是基 于 NET Framework 3 5 运用 ASP NET 2 0 技术来实现的 开发语言是 C 语言 在这个系统 中将利用一些较新的技术来增加用户体验 我负责整个系统的架构设计 编码 测试等 这篇论文我主要先对博客进行简要的介 绍 然后介绍了开发本系统所用到的新技术 接着对整个系统中的模块进行设计 然后既 要剖析部分代码 最后演示完整的系统 3 1 41 4 本论文章节安排本论文章节安排 第二章开始介绍了系统开发环境及相关技术 接着详细介绍了系统设计与实现 分别 从需求分析 数据库设计 模块详细设计作了详细的描述 最后剖析了部分代码 第三章对完成的系统进行演示 最后对本论文进行小结 主要描述了在做本系统的过程中遇到的问题及解决方法以及 在本系统中我学到了一些知识 以及对给与我帮助的人表示致谢 2 2 系统设计与实现系统设计与实现 2 12 1 需求分析需求分析 2 1 1 功能需求 一般博客的功能包括 1 所有人能浏览博客的内容 文章 相片 视频等 2 所有人可以留言 留言可以是针对文章的评论 也可以是给博主的留言 3 博主可以登录 他人无法登录 4 博主登录后可以发表 删除 更新文章 相片 视频等内容 他人无法对博客 内容操作 5 博主可以对所有人的留言进行管理 删除 操作 也可以回复留言者 2 1 2 项目计划安排 项目整体的开发计划如图2 1 此图是用Visio 2007生成的 主要描述了项目的整体的 安排和各个部分在整个项目开发周期中所占的时间比重 4 图 2 1 项目安排计划 5 2 22 2 系统开发环境系统开发环境 2 2 1 开发环境简介 硬件配置 机器 Thinkpad CPU Core 2 T5670 1 8GHz 内存 DDR2 3G 硬盘 160G 操作系统 Microsoft Windows Server 2008 Datacenter 64bit en us 开发工具 Visual Studio 2008 Team System SQL Server 2005 Express 工具插件 Silverlight jQuery 2 2 2 Visual Studio 2008 开发环境简介 Visual Studio 2008是微软公司推出目前最流行的Windows平台应用程序开发环境 Visual Studio 2008 在三个方面为开发人员提供了关键改进 快速的应用程序开发 高效 的团队协作和突破性的用户体验 Visual Studio 2008可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序 也可以用来创建网络服务 智能设备应用程序和 Office 插件 2 2 3 SQL Server 2005 数据库简介 SQL Server 2005 是一个全面的数据库平台 使用集成的商业智能 BI 工具提供了 企业级的数据管理 SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安 全可靠的存储功能 可以构建和管理用于业务的高可用和高性能的数据应用程序 SQL Server 2005已经与Visual Studio 和 NET Framework进行了集成 据微软官方显 示 利用SQL Server 2005 和 Visual Studio进行开发 开发速度提高了40 以上 在很 多场景中 能减少50 70 代码量 考虑到 SQL Server 2005 与 NET 平台的集成性和便利性 同时也考虑到技术之间的衔 接 系统的性能和运行的稳定性 所以本系统使用的是 SQL Server 2005 Express 数据库 6 2 2 3 3 相关技术简介相关技术简介 2 3 1 C 语言简介 C 语言是一门简单 现代 优雅 面向对象 类型安全 平台独立的一门新型组件编 程语言 经过编译 C 编写的源代码被编译为一种符合 CLI 规范的中间语言 IL 通常是 具有扩展名为 exe 和 dll 的文件 运行时 由 CLR 加载 IL 元数据和引用的资源 然后转 换成机器语言再执行 本系统采用 C 语言来开发各个组件 功能模块 2 3 2 ASP NET 简介 ASP NET 是一个统一的 Web 开发模型 作为 NET Framework 的一部分提供 当在编 写 ASP NET 应用程序的代码时 可以访问 NET Framework 中的类 ASP NET 中有一个重要功能 可以通过与客户端应用程序中类似的 基于事件的模型 来对网页进行编程 与传统 HTML 页或基于客户端的 Web 应用程序中的事件相比 由 ASP NET 服务器控件引发的事件的工作方式稍有不同 导致差异的主要原因在于事件本身 与处理该事件的位置的分离 在基于客户端的应用程序中 在客户端引发和处理事件 但 是 在 ASP NET 网页中 与服务器控件关联的事件在客户端 浏览器 上引发 但由 ASP NET 页在 Web 服务器上处理 对于在客户端引发的事件 ASP NET Web 控件事件模型要求在客户端捕获事件信息 并通过 HTTP POST 将事件消息传输到服务器 页必须解释该 POST 以确定所发生的事件 然后在要处理该事件的服务器上调用代码中的相应方法 本系统中在 UI 层的表示层逻辑就是基于 ASP NET 的 Web 事件模型进行编程的 利用这 种编程模型既可以简化 Web 应用程序的开发又可以实现出功能非常强大系统 2 3 3 ADO NET 简介 Microsoft 在开始设计 NET 框架时设计了一个新的数据访问框架 ADO NET ADO NET 具有如下优点 提供了断开的数据访问模型 提供了与 XML 的紧密集成 提供了与 NET 框架的无缝集成 例如 兼容基类库类型系统 ADO NET 提供两种访问模式 断开连接模式和连接模式 使用断开连接模式一般利用 DataAdapter 从数据源检索数据并填充 DataSet 中的表 同时还可将对 DataSet 所做的 更改解析回数据源 而使用连接模式是利用 ADO NET DataReader 从数据库中检索只读 7 只进的数据流 查询结果在查询执行时返回 在并存储在客户端的网络缓冲区中 直到程 序使用 DataReader 的 Read 方法对它们发出请求 使用 DataReader 可以提高应用程序 的性能 原因是它只要数据可用就立即检索数据 并且 默认情况下 一次只在内存中存 储一行 减少了系统开销 创建一个 DataSet 对象的系统开销是比较大的 如果大范围的使用 DataSet 对系统 的压力会增大很多 DataSet 本身是弱类型的 在业务逻辑处理层进行操作时会存在类型 安全的隐患 并且在编码时也不能提供代码提示的便捷性 虽然可以构建强类型的 DataSet 但是会增加大量的代码 另外如果深度使用 DataSet 比如用到 DataRelation 等 又会牵扯到与数据库的同步问题 及数据库关于加锁机制的问题 这样会增大技术复 杂度 这是没有必要的 在本系统中使用是连接方式来读取数据 同时使用泛型 List 来承 载数据 每读一条数据就存储到泛型 List 中去 泛型 List 相对于弱类型的 DataSet 省去 了不必要的装箱和拆箱操作 大大提高了性能 2 3 4 Silverlight 技术简介 Microsoft Silverlight 是一种跨浏览器 跨平台的用于为 Web 生成和提供下一代媒 体体验和丰富的交互式应用程序 RIA Silverlight 统一了服务器 Web 和桌面的功能 统一了托管代码和动态语言 声明性编程和传统编程以及 Windows Presentation Foundation WPF 的功能 可以采用 C 和 VB NET 编程语言来编写托管代码 并可以全 面使用 NET 框架库 技术细节请参见 Silverlight SDK 或者 MSDN 等资料 本系统涉及到 的详细代码请参见 3 2 8 节 由于在开发上有 NET 强大类库的支撑 同时在 IDE 上又有 Visual Studio 2008 Blend2 这样的工具 与服务器通信又有 WCF 这样的技术做铺垫 所以本人选择 Silverlight 作为这个毕业设计的前端展示技术 2 3 5 WCF 简介 Windows 通信基础 Windows Communication Foundation WCF 是微软分布式应用程 序开发的集大成者 它整合了 Net 平台下所有的和分布式系统有关的技术 例如 Net Remoting ASMX WSE 和 MSMQ 以通信 Communiation 范围而论 它可以跨进程 跨机器 跨子网 企业网乃至于 Internet 以宿主程序而论 可以以 ASP NET EXE WPF Windows Forms NT Service COM 作为宿主 Host WCF 可以支持 8 的协议包括 TCP HTTP 跨进程以及自定义 安全模式则包括 SAML Kerberos X509 用 户 密码 自定义等多种标准与模式 也就是说 在 WCF 框架下 开发基于 SOA 的分布式系 统将变得非常容易 本系统也涉及部分 WCF 技术 主要用在 Silverlight 与后台数据的交互上 Silverlight 仅仅支持的一种绑定 那就是 BasicHttpBinding 协议 而这正是 WCF 所支持 的一种基本协议 这样 WCF 与 Silverlight 两种技术之间有了更好的衔接 同时这给我在 系统的开发中提供了很好的便利性 详细的代码请参见源码部分 2 3 6 jQuery 库简介 jQuery 由美国人 John Resig 创建 jQuery 是继 prototype 之后又一个优秀的 JavaScript 框架 它是轻量级的 js 库 压缩后只有 21k 这是其它的 JavaScript 库所不 及的 它兼容 CSS3 还兼容各种浏览器 jQuery 是一个快速的 简洁的 JavaScript 库 使用户能更方便地处理 HTML documents events 实现动画效果 并且方便地为网站提供 AJAX 交互 jquery 的简单的实用的确有相当大的吸引力 本系统在 UI 层就应用了 jQuery 库 用 来展现一些界面特效 详细的代码请参见源码部分 2 42 4 系统设计系统设计与实现与实现 2 4 1 分层架构核心思想 1 针对接口编程 而不针对实现编程 针对接口编程 而不是针对实现编程 这是面向对象设计中最重要的原则之一这里所 指的接口 不是特指编程语言中的具体语言元素 如 C 中由 Interface 定义的语言接口 而是只一种抽象的 在语义层面上起着接合作用语义体 它的具体实现 可能是接口 可 能是抽象类 甚至可能是具体类 一般接口可以理解为以下两点 接口是一组规则的集合 它规定了实现本接口的类或接口必须拥有的一组规则 体 现了自然界 如果你是 则必须能 的理念 接口是在一定粒度视图上同类事物的抽象表示 具体到 N 层架构中 针对接口编程的意义是这样的 现约定将 N 层架构的各层依次编 9 号为 1 2 K N 1 N 其中层的编号越大 则越处在上层 那么第 K 层不应该 依赖具体一个 K 1 层 而应该依赖一个 K 1 层的接口 即在第 K 层中不应该有 K 1 层 中的某个具体类 2 依赖倒置原则 在软件设计原则中 有一种重要的思想叫做依赖倒置 它的核心思想是 不能让高层 组件依赖底层组件 而且 不管高层组件和底层组件 两者都应依赖于抽象 所谓的依赖 倒置原则 其实就是上面提到针对接口编程 而不是针对实现编程 两者在本质上是统一 的 综上所述 本系统应该是这样一种架构 1 N 层架构的各层依次编号为 1 2 K N 1 N 其中层的编号越大 则越处在上层 2 架构中仅存在一种依赖 即第 K 层接口依赖第 K 1 层 其中 1 K N 3 封装变化 封装变化的原则定义为 找出应用中可能需要变化之处 把它们独立出来 不要和那 些不需要变化的代码混杂在一起 4 开放 关闭原则 开发 关闭原则定义为 对扩展开放 对修改关闭 5 单一职责原则 任何一个类都应该有单一的职责 属于单独的一层 而不能同时担负两种职责或属于 多各层 三层架构是一种比较成熟的系统架构 通过将整个系统分为不同的逻辑块 大大降低 了应用系统开发和维护的成本 三层架构将数据访问和逻辑操作都集中到组件中 增强了系 统的复用性 同时也使系统的扩展性大大增强 模块化使得系统很容易在纵向和水平两个 方向拓展 一方面可以将系统升级为更大 更有力的平台 另一方面也可以适当增加规模 来增强系统的网络应用 从开发角度和应用角度来看 三层架构比双层或单层结构都有更大的优势 三层结构 适合群体开发 每人可以有不同的分工 协同工作使效率倍增 开发双层或单层应用时 每个开发人员都应对系统有较深的理解 能力要求很高 开发三层应用时 则可以结合多 方面的人才 只需少数人对系统全面了解 从一定程度工降低了开发的难度 10 基于以上优点本系统采用三层架构来开发 2 4 2 实体介绍 根据对本博客系统的简要需求分析 可以确定以下几个实体 用户信息 代表用户 包括了用户的登录名 密码 个性设置等 博客留言 代表一些人对博客的评价等信息 博客信息 包含了博客的基本信息 如博客名称 访问人数 主题等 文章 就是文章实体 包含文章的基本信息 如标题 内容 发布时间等 文章分类 就是文章的类别 文章评论 代表了对于莫一篇文章发表的评论 照片 代表照片基本信息 照片分类 代表照片的分类 2 4 3 数据库设计 图 2 2 数据库表 整个系统涉及的数据库的表有 8 张 各个表之间的关系如图 2 2 以下是各个表的简 11 要说明 UserInfo 用户表 主要保存了博主的相关信息 Leavewords 留言表 主要保存访问者对整个 Blog 的评论 BlogInfo 博客表 主要存放 Blog 的基本设置信息 PhotoCategory 图片分类表 主要存放图片的分类信息 Photo 图片表 主要存放图片信息 PostCategory 文章分类表 文章分类信息 Post 文章表 文章的基本信息 Comment 文章评论表 文章的相关评论信息 图 2 3 完整显示了整个系统设计到的表 图 2 3 数据库表 存储过程是 SQL 语句和可选控制流语句的预编译集合 以一个名称存储并作为一个单 元处理 存储过程存储在数据库内 可由应用程序通过一个调用执行 而且允许声明变量 有条件执行以及其它强大的编程功能 存储过程在创建时即在服务器上进行编译 所以执 行起来比单个 SQL 语句快 由于存储过程在性能上和功能上相对于单个 SQL 语句有较大的 优势 所以在系统中采用存储过程 图 2 4 展示了系统所用到的存储过程 12 图2 4 存储过程 2 4 4 实体类的设计与实现 实体类是对实体的封装 它通常包括私有变量及对应的 get set 方法 而在 C 语言 中 将 get set 方法又组合成属性 这些私有变量或者属性 则对应现实实体相应的属 性 实体类的作用主要有两个 一是作为现实实体的计算机代表 二是数据的传递 在分 层架构的应用中 数据正是封装在实体类中 然后以实体类为载体在各个层次间传递 这 样不但符合面向对象设计的原则 也便于对数据存取进行控制 理想情况下 实体类中不 能含有任何逻辑 它应该单纯是数据的封装 所以 它不应该有方法 当然构造函数除外 基于以上分析 我们设计的实体类 应该是准确 干净 易用 准确表明实体类应该准确 无误地表示现实中的实体 干净表示实体类应该仅包含数据的封装而不掺杂任何逻辑或者 与数据封装无关的东西 易用表示实体类应该很容易地用来在各层之间传递数据 本系统不需考虑特殊实体类的情况 仅需编写简单的实体类即可 详细信息请参见相 关代码 完整的类库如图2 5所示 13 图2 5 实体类库 2 4 5 接口设计 接口有以下几个作用 接口明确了各层次的职责 接口决定了各个层次具体需要实现的功能 接口形成了整个分层架构的骨架 接口暴露了层次的 API 为上层提供了依赖点 因此 接口的设计实际上处在现实需求和程序实现之间 起到承上启下的用 它决定 了需求分析中的各个需求如何合理地映射成各个层次的不同方法 所以接口的设计应该在 需求分析的基础上进行 本系统中主要需要设计的接口有 数据访问层接口 业务逻辑层接口 1 数据访问层接口 数据访问层负责与数据源的交互 负责数据的创建 删除 更新及查询工作 它不应 该包含任何业务逻辑或可视性元素 对它所处理数据的业务意义是 无知 的 它与数据 库系统一起负责数据完整性 在三层模型中 数据访问层为上层 业务逻辑层 提供了服 务 数据访问层的接口规定了数据访问层的功能 业务逻辑层针对接口进行编程 不管数 据访问层如何变化 只要接口不变 业务逻辑层都不需要变动 这样在开发系统中将可变 因素减少到最少 这也就是分层架构的最基本的思想 针对接口编程 而不针对实现编程 以下列出本系统中完整的类库 如图2 6所示 14 图2 6 数据访问层接口 2 业务逻辑层接口 在设计业务逻辑层接口之前 需要对业务逻辑层的职责进行明确 业务逻辑层的职责 叙述如下 业务逻辑层负责完成与系统领域相关的业务逻辑操作 实现过程中的数据访问 操作通过调用数据访问层实现 它对业务相关的数据有效性负责 但是不负责 UI 输入数 据的有效性 业务逻辑层中不能含有与显示相关的逻辑 不能决定或影响数据最终的呈现 样式 由于不同领域的业务逻辑差别很大 所以无法像数据访问层那样对接口操作做出明 确的分类 在实际项目开发中 业务逻辑层接口的设计往往要和领域专家合作 而在本博 客系统中 由于业务逻辑都是比较简单的 所以不用进行专门的领域逻辑调研 完整的类 库如图2 7所示 图2 7 业务逻辑层接口 2 4 6 IoC 容器及依赖注入机制的设计 1 IoC 容器及依赖注入机制的设计 依赖注入 Dependency Injection 和控制反转 Inversion of Control 是同一个 概念 具体含义是 当某个角色 调用者 需要另一个角色 被调用者 的协助时 在传 统的程序设计过程中 通常由调用者来创建被调用者的实例 但在具有依赖注入的系统里 创建被调用者的工作不再由调用者来完成 因此称为控制反转 创建被调用者实例的工作 15 通常由 Ioc 容器来完成 然后注入调用者 因此也称为依赖注入 具体到分层架构中 依赖注入可以这样理解 当上层类的需要调用下层类功能时 不再是由上层类直接实例化 下层类 而是通过 IoC 容器获取一个下层类的实例 然后注入到上层类中 IoC 容器负责根据配置信息 创建不同的数据访问层及业务逻辑层实例 并将其注入 到业务逻辑层与表示层中 从而实现三个层次的解耦 依赖注入机制的实现有两种途径 一种是使用现有的框架 如 J2EE 平台上的 Spring 框架就可以很好的完成依赖注入功能 在 NET 平台上有 Spring NET 等框架可以选择 另 一种途径 就是自己编写相应的代码 完成依赖注入机制 鉴于 NET 平台上的 反射 机制对依赖注入的实现非常方便 所以本系统将采用第二 种方案 使用 Abstract Factory 设计模式和反射机制完成依赖注入的设计 2 Abstract Factory 模式的应用 Abstract Factory 模式是在依赖注入机制中广泛采用的设计模式 Spring 的 IoC 容 器就采用了这个经典模式 它的中文译名叫做 抽象工厂 其定义是这样的 提供一个接 口 用于创建相关或依赖对象的家族 而不需要指定具体类 以数据访问层注入到业务逻辑层为例 业务逻辑层注入到表示层的原理类似 先假 设该博客系统中仅有用户和文章两个实体 并且我们的系统需要能访问 SQLServer 和 Oracle 两个数据库 那么 系统中就需要 SQLServerDAL 和 OracleDAL 两个数据访问层 它们都含有两个数据访问类 分别是 SQLServerUserDAL SQLServerPostDAL 和 OracleUserDAL OraclePostDAL 此时 用户和帖子的业务逻辑层类 UserBLL 与 PostBLL 作为客户类 不应该与具体的数据访问层类耦合 而应该先定义接口 IUserDAL 与 IPostDAL 接口 让业务逻辑层与这两个接口耦合 再设计 SQLServerDALFactory 与 OracleDALFactory 分别作为生成两种数据访问层的工厂 最后通过配置信息 决定在业 务逻辑层中实例化哪个工厂 如图 2 8 所示 16 图 2 8 Ioc 容器注入原理 Abstract Factory 模式虽然可以完成依赖注入的机制的设计 但是其本身也有缺陷 从上文可以看出 就数据访问层而言 每个数据访问层实现都要对应一个工厂 业务逻辑 层当然也是如此 并且以后每当添加一个新的实现 都要写一个相应的工厂 因此 当层 次的实现过多时 整个系统就会存在很多工厂 这些工厂不仅使代码变得臃肿 也难以维 护 NET 平台上 有一种叫 反射 的机制 利用这种机制 可以简化 Abstract Factory 设计模式的代码 而利用反射机制简化后的 Abstract Factory 则可以叫做 Reflection Abstract Factory 也叫反射工厂 反射就是动态发现类型信息的能力 它帮助程序设计人员在程序运行时利用一些信息 去动态地使用类型 这些信息在设计时是未知的 这种能力可以用于后期绑定 反射还支 持的更高级的行为 能在运行时动态创建新类型 并且对这些新类型的操作进行调用 有了反射机制 我们就可以从配置文件 一般是在 Web config 读出配置信息后 不 是根据这个信息实例化相应的工厂 而是让反射工厂通过这些信息 动态加载相应程序集 中的类 这样每个层次只需要一个工厂就可以完成依赖注入 即使以后出现新的实现 也 不需要修改或添加工厂 只要在配置文件中写明程序集的名字即可 如果考虑到性能和易 用性 可以配合缓存机制和 Facade 设计模式进一步优化 IoC 的设计 最终反射工厂结构 17 图如图 2 9 所示 图2 9 反射工厂结构图 图 2 10 反射工厂示意图 在图2 10中DALFactory 和 BLLFactory 的实例化箭头直接指向了 IDAL 和IBLL 实际 上 IDAL 和 IBLL 分别是一个工程 它里面是一组接口 这里不是指工厂直接实例化接口 实际上接口也是不可能被实例化的 使用反射机制后 同一层次的不同实现分别放在不同工程下 而里面包含的各个类的 名字是一致的 例如 SQLServerDAL 下和 OracleDAL 下都有UserInfoDAL 至于运行时具 体实例化哪个 是通过 Web config 中配置实现的 也就是说Web config 决定了实例化哪 个工程下的UserInfoDAL 18 2 4 7 数据访问层的实现 数据访问层的实现一般有两种方式 基于朴素的实现和基于 ORM 框架的实现 对于 ORM 由于篇幅原因不做过多描述 本系统采用数据访问层的朴素实现 就是指传统的通过 执行 SQL 语句或调用存储过程实现对数据库的操作 NET 平台内置了丰富的对数据库进 行操作的类库 因此数据访问层的朴素实现非常方便 具体到本课题中 数据访问层的朴素实现操作一般分为以下两种方式 使用动态 SQL 语句 1 获取参数 2 动态组合 SQL 语句 3 执行 SQL 语句 4 返回结果 使用存储过程 1 获取参数 2 生成存储过程可用参数形式 3 调用存储过程 5 返回结果 存储过程相对于动态 SQL 语句有一定的优越性 在本系统中都将采用存储过程 在 系统中由于每次执行存储过程时 都需要一系列类似的操作 因此我在系统中对这个模块 进行了一次封装 这样可以大大减少重复性代码 在本系统的实现中 将各种封装对数据 库操作的辅助类叫做 DALHelper 类 如对 SQLServer 数据库进行操作的辅助类就叫做 SQLServerHelper 它包含了四个方法 ExecuteSQLNonQurey ExecuteSQLReader ExecuteProcedureNonQurey ExecuteProcedur eReader 分别用于执行存储过程返回不同的结果 这样 在 SQLServer 数据访问层中 就可以直接调用这些方法完成操作 朴素实现的示意图如图 2 11 所示 19 图 2 11 数据库访问层的朴素实现 本系统的数据访问模块工程如图 2 12 所示 图 2 12 数据访问模块 1 DAL 类库 实现 IDAL 接口 主要包含各个实体所具有的操作 文件列表如图 2 11 2 Factory 类库 产生 DAL 或者 BLL 的实现 代码分析一 CacheAccess cs Create Time 2008 12 25 Editor Zhou Hui using System using System Collections Generic 20 using System Linq using System Text using System Web Caching using System Web namespace BlogSys NLBlog Data Factory Control the cache class public sealed class CacheAccess Get object from cache Cache key The object get from cache public static object GetFromCache string key Cache cache HttpRuntime Cache return cache key Save the object value to the cache Cache key The object value Cache dependency public static void SaveToCache string key object value CacheDependency cacheDependency Cache cache HttpRuntime Cache cache Insert key value cacheDependency 这个类主要包含两个方法 GetFromCache和SaveToCache 顾名思义就是一个从缓存里 取 一个是把对象往缓存里加 从缓存里取的时候可能是返回的NULL 表示这个对象之前并没有被缓存 这个值在 DependencyProvider cs里面有判断 另一个方法是把一个对象往缓存里面加 注意最后一 个参数是一个缓存依赖 这个参数是指如果这个依赖的文件 或者其他什么 一旦变化了 那么缓存里的东西就会销毁 代码分析二 DependencyProvider cs Create Time 2008 12 25 Editor Zhou Hui using System Web Caching using System Web using System Configuration using System Reflection namespace BlogSys NLBlog Data Factory Dependency injected provider Using reflection mechanism 21 public sealed class DependencyProvider Get DAL object method The name of the DAL class The object value public static object GetDALObject string className Get DAL namespace from cache object dalObject CacheAccess GetFromCache DAL if dalObject null DAL namespace doesn t exist in the cache then insert new one into the cache CacheDependency fileDependency new CacheDependency HttpContext Current Server MapPath Web config dalObject ConfigurationManager AppSettings DAL ToString CacheAccess SaveToCache DAL dalObject fileDependency Convert object type to string type then get the DAL namespace string dalName dalObject ToString Get the full DAL class name string fullDALClassName dalName className Get DAL class from cache object fullDALObject CacheAccess GetFromCache className if fullDALObject null DAL class name doesn t exist in the cache then insert new one into the cache CacheDependency fileDependency new CacheDependency HttpContext Current Server MapPath Web config fullDALObject Assembly Load dalName CreateInstance fullDALClassName CacheAccess SaveToCache className fullDALObject fileDependency return fullDALObject Get BLL object method The name of the BLL class The object value public static object GetBLLObject string className Get BLL namespace from cache object bllObject CacheAccess GetFromCache BLL if bllObject null BLL namespace doesn t exist in the cache then insert new one into the cache CacheDependency fileDependency new CacheDependency HttpContext Current Server MapPath Web config bllObject ConfigurationManager AppSettings BLL ToString CacheAccess SaveToCache BLL bllObject fileDependency Convert object type to s

温馨提示

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

评论

0/150

提交评论