(系统分析与集成专业论文)开源cms系统dotnetnuke的研究与应用.pdf_第1页
(系统分析与集成专业论文)开源cms系统dotnetnuke的研究与应用.pdf_第2页
(系统分析与集成专业论文)开源cms系统dotnetnuke的研究与应用.pdf_第3页
(系统分析与集成专业论文)开源cms系统dotnetnuke的研究与应用.pdf_第4页
(系统分析与集成专业论文)开源cms系统dotnetnuke的研究与应用.pdf_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

摘要 随着i n t e r n e t 技术的发展,w e b 2 0 的出现已经改变了目前的互联网格局,同时也 对内容管理系统提出了新的挑战,其交互式的特点使现有的内容管理系统无法满足网站 发展的需要。d o t n e t n u k e ( 简称d n n ) 是一个全新的基于w e b 2 0 的c m s 系统,其主要 特点是开发源代码,支持多种数据库扩展,用户体验友好。d n n 拥有一个成熟的框架结 构,开发者可以将更多的时间投入在具体的业务应用上,而不用花太多时间在底层框架 上。 本文对d o t n e t n u k e 这个丌源的c m s 系统的历史进行了回顾,并总结了d n n 的特点。 笔者结合自己参与的贵阳经济技术开发区经贸信息网以及贵阳市地税局内网的实践,探 讨了基于数据提供者模式的d n n 的模块开发,并提出了一种基于数据集的开发模式,而 且对这两种丌发模式进行了对比,最后对d n n 的安全性进行了探讨与分析,并提出了一 些修复建议。 d n n 的体系架构,模块开发,安全性研究是本文的重点。主要包含以下研究内容: 1 详细介绍了d n n 的三层架构,并分析了界面层,业务逻辑层,数据访问层三者的 关系。d n n 中的数据访问层的核心是数据提供者模式,本文对其进行了深入地分析。 2 d n n 的开发涉及到皮肤丌发,模块开发,模块打包等。本文介绍了d n n 的皮肤开 发方法,然后以a n n o u n c e m e n t 模块为例,阐述了d n n 中基于数据提供者模式的丌发方 法。随后笔者提出了基于数据集的开发方法,并与数据提供者模式进行了对比,接着介 绍了d n n 模块的打包方法,最后总结了9 条d n n 网站的优化技巧。 3 现在最流行的两大w e b 攻击是跨站攻击和s q l 注入攻击,本文分析了 h t t p :s e c u n i a c o m 发现的d n n 的首页存在的跨站脚本漏洞的成因,对d n n 中s q l 注 入攻击进行了探讨,并对d n n 的配置文件w e b c o n f i g 的安全性配置进行了详细分析。 最后,对本论文进行了系统总结,并对本文研究的内容和今后的发展和主要关注点 进行了探讨。 关键词:d o t n e t n u k e ;数据提供者;数据集;跨站脚本攻击;s q l 注入 a b s t r a c t w i t ht h ed e v e l o p m e n to ft h ei n t e m e tt e c h n o l o g y ,w e b 2 0c h a n g e st h ep a t t e r no ft h e i n t e r n e t ,a n di ta l s oc h a l l e n g e st h et r a d i t i o n a lc o n t e n tm a n a g e m e n ts y s t e m ( c m s ) t h e i n t e r a c t i v ef e a t u r e sm a k e si td i f f i c u l tf o rt h ec u r r e n tc m st of u l f i l lt h er e q u i r e m e n to fw e b s i t e sd e v e l o p m e n t d o t n e t n u k e ( r e f e r r e da sd n n ) i san e wc m ss y s t e mb a s e do nt h e w e b 2 0 ,a n di t sm a i nc h a r a c t e r i s t i ci so p e ns o u r c e ,s u p p o r t i n gt h ee x p a n s i o no fav a r i e t yo f d a t a b a s ea n dw i t haf r i e n d l yu s e re x p e r i e n c e d n nh a sam a t u r ef r a m e w o r k ,s od e v e l o p e r s c a np u tm o r et i m ei ns p e c i f i cb u s i n e s sa p p l i c a t i o n sr a t h e rt h a nt h eb o t t o mf r a m e w o r k t h i sp a p e rr e v i e w st h eh i s t o r yo fd o t n e t n u k ea n ds u m m a r i z e si t sc h a r a c t e r i s t i c s w i t ha c o m b i n a t i o no ft h ea u t h o r so w n p a r t i c i p a t i o ni ne c o n o m i ca n dc o m m e r c ew e bo fg u i y a n g e c o n o m i ca n dt e c h n o l o g i c a ld e v e l o p m e n tz o n ea n dt h ei n t r a n e to fg u i y a n gc i t yt a x ,t h e w r i t e rd i s c u s s e sd n nm o d u l ed e v e l o p m e n tb a s e do nt h ed a t ap r o v i d e ra n dp r e s e n t san e w w a y b a s e do nd a t a s e ta n dt h e nc o m p a r et h et w od i f f e r e n tm o d e l s f i n a l l y ,t h ew r i t e ra n a l y s i s t h es e c u r i t yo fd n na n dg i v e ss o m es u g g e s t i o n s a r c h i t e c t u r eo fd n n ,m o d u l ed e v e l o p m e n ta n ds e c u r i t ya r et h ef o c u so ft h i sa r t i c l e t h e m a i nr e s e a r c hc o n t e n t si n c l u d et h ef o l l o w i n g : 1 t h ew r i t e rg i v e sad e t a i l e di n t r o d u c t i o no ft h et h r e e - t i e rs y s t e mo fd n na n da n a l y s i s t h er e l a t i o n s h i po ft h et h r e et i e r s :i n t e r f a c el a y e r , b u s i n e s sl o g i ct i e r , d a t aa c c e s s l a y e r d a t ap r o v i d e ri sc o r eo fd a t aa c c e s sl a y e ro fd n n t h i sp a p e ra n a l y s i st h em o d e lo f d a t ap r o v i d e rf u r t h e r 2 t h ed e v e l o p m e n to fd n ni n c l u d e ss k i nd e v e l o p m e n t ,m o d u l ed e v e l o p m e n ta n d m o d u l ep a c k a g e t h i sp a p e ri n t r o d u c e sm o d u l ed e v e l o p m e n t ,a n dt h e nt a k e sa n n o u n c e m e n t m o d u l ea se x a m p l e ,e x p l a i n sd n nm o d u l ed e v e l o p m e n tb a s e do nd a t ap r o v i d e r a l s ot h e w r i t e rp r e s e n t sa n o t h e rw a yb a s e do nd a t a s e ta n dc o m p a r e st h et w od i f f e r e n tm o d e s t h e nt h e w r i t e rg i v e sai n t r o d u c t i o no fd n nm o d u l ep a c k a g e ,f i n a l l yt h ew r i t e rs u m m a r i z e sn i n ed n n w e bs i t eo p t i m i z a t i o nt e c h n i q u e s 3 s q li n j e c t i o na n dc r o s s - s i t es c r i p t i n ga t t a c ka r et h em o s tp o p u l a rw e ba t t a c k s t h e w r i e ra n a l y s i st h er e a s o no ft h ed n nh o m es i t e sc r o s s s i t e s c r i p t i n ga t t a c kf o u n db y h t t p :s e c u n i a c o m a n dd i s c u s s e st h es q li n j e c t i o no fd n n t h e nt h ew r i t e rg i v e sad e t a i l e d a n a l y s i so f t h es e c u r i t ya b o u tt h ec o n f i g u r a t i o nf i l ew e b c o n f i g t h ef i n a lc h a p t e rc o n c l u d e st h i st h e s i sa n de x p l o r e sp r o s p e c tf o rt h ep o s s i b l ea p p l i c a t i o n k e y w o r d s :d o t n e t n u k e ;d a t ap r o v i d e r ;d a t a s e t ;c r o s s s i t es c r i p t i n g ;s q li n j e c t i o n 湖北大学学位论文原创性声明和使用授权说明 原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所 取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任 何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡 献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的 法律后果由本人承担。 论文作者签名: 日期:年月日 学位论文使用授权说明 本学位论文作者完全了解学校有关保留、使用学位论文的规定,即: 按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位 论文的印刷本和电子版,并提供目录检索与阅览服务;学校可以允许采用 影印、缩印、数字化或其它复制手段保存学位论文;在不以赢利为目的的 前提下,学校可以公开学位论文的部分或全部内容。( 保密论文在解密后 遵守此规定) 作者签名: 专卜吖 指导教师签名:刁汐崎夕产 日期: 日期: 伊d o 吁广呻叩1 第章引言 1 1 本论文选题背景 第一章引言 c m s 是c o n t e n tm a n a g e m e n ts y s t e m 的缩写,意为“内容管理系统”。c m s 具有许 多基于模板的优秀设计,可以加快网站丌发的速度和减少开发的成本。c m s 的功能并 不只限于文本处理,它也可以处理图片、f l a s h 动画、声像流、图像甚至电子邮件档案。 当a s p n e t 出来的时候,微软为了展示a s p n e t 的强大功能,做了一个门户系 统的示范程序,名字叫做i b u y s p y ,这是一个虚拟的网上商店系统。这个应用程序关键 性的特点是展示a s p n e t 的动态模块功能,例如通过添加“模块”到页面上创建内容, 基于用户权限来控制功能的可见性,提供一个简单的站点导航( 不需要任何手工编辑页 面的工作) 。2 0 0 2 年底,s h a w nw a l k e r 利用这些代码创建了一个增强的v b n e t 实现, 名字叫做i b u y s p y w o r k s h o p 。这个项目取得巨大的成功,逐渐发展出了自己的独立产 品,并被改名为d o t n e t n u k e ( 简称d n n ) 。通过几年的发展,d n n 从支持n e t l 1 到 支持n e t3 5 ,现在已经支持v s 2 0 0 8 和s q l 2 0 0 8 ,d n n 在不断地成长壮大。从d n n 的官方站点以及各大d n n 论坛可以看出研究d n n 的火热程度。在国内d n n 也有许多 热心的团队,如d n n m e ,d n n c h i n a ,d n n s u n ,d n n m i x 等。同时d n n 的本地化工 作也做得相当完善,各种语言包的新版本能在最短时间内公布出来。d n n 在国内的商 业上是相当成功地,但学术界对d n n 的研究还是相当不够,公丌发表的文章相当少, 本文f 是基于这点,结合理论和实际来对d n n 的架构,丌发来进行探讨,并对d n n 的安全性做些初步的研究。 1 2 本论文研究内容和主要工作 在参与贵阳经济技术开发区经贸信息平台( w w w g e t a n e t c n ) 与贵阳市地方税务局内 网的建设中,我们的项目团队选取了d n n 这个开源框架,实践证明项目是成功的。本 文结合这2 个项目和平时的学习对d o t n e t n u k e 的体系架构和模块丌发进行探讨,最后 对其安全性做了初步的研究。安全性研究是基于源代码安全扫描工具f o r t i f y 的使用和 实际地分析得出的。 在无特别说明的情况下,本文中的d o t n e t n u k e 简称d n n 。所讨论的d n n 的版本 为d n n 4 x 系列。 湖北人硕t :学何论文 1 3 本论文组织和结构 本论文一共分为六部分。分别讨论了本文的选题依据,d n n 的历史及其特点,重 点对d n n 的体系架构及d n n 的模块开发进行了分析,并提出了基于数据集的开发方 法,同时将该方法与d n n 支持的数据提供者模式进行了对比,最后探讨了d n n 的安 全性。 第一部分引言。介绍沦文选题背景,主要研究工作及组织结构。 第二部分d n n 的发展历史及特点。介绍了d n n 的发展历史及d n n 的特点。 第三部分d n n 体系架构。 这一部分阐述了d n n 的三层体系架构,并对d n n 的界面层,业务逻辑层,数据 访问层做了分析,重点对d n n 的数据提供者模式进行了详细分析。 第四部分d n n 丌发。 本部分介绍了d n n 的皮肤,模块开发,提出了一种基于数据集的开发模式,并对 基于数据提供者模式的丌发和基于数据集的开发进行了对比,对两者的优缺点做了分 析,最后阐述了d n n 模块的打包方法,同时结合实际的丌发与研究总结了9 条d n n 网站的优化技巧。 第五部分d n n 安全性研究。 本部分对d n n 的安全性进行了分析,深入地分析了d n n 的首页存在的跨站攻击 漏洞和s q l 注入问题,并对d n n 中w e b c o n f i g 文件中相关安全性配置做了讨论。 第六部分总结和展望。对本论文进行总结和未来研究进行展望。 2 第:章d n n 发展历史及特点 第二章d n n 发展历史及特点 2 1d n n 历史 2 0 0 2 年1 月,微软公司发布了一个名为“i b u y s p y p o r t a l ( i b s ) ”的安装工具包,这 也是当时罕有的几个s t a r t e rk i t s 之一。s t a r t e rk i t s 是一个所有源代码开放的示例应用程 序,它演示如何通过它来实现特殊的复杂的软件功能。这个工具包非常简单,但却非常 完善,并且推崇和吸引程序员们在它的基础之上开发软件项目。 起初,i b u y s p yp o r t a l 的f 1 的是为了演示a s p n e t 是如何能够构架出一个动态的, 数据驱动的门户软件,但是微软的n e t 研发中心很快地将i b s 变成了为他们自己开发 a s p n e t 应用程序所必须的一个组件。 2 0 0 2 年1 2 月2 4 同,p e r p e t u a lm o t i o ni n t e r a c t i v es y s t e m 公司的s h a u nw a l k e r 发布 了一个基于i b s 的,经过他自己使用v b n e t 修改的系统,这个丌源的被称作i b u y s p y w o r k s h o p 的软件,很快地被链接进了微软官方的a s p n e t 论坛。这套系统在原来i b s 基础上,增加了大量的多样的更加先进的元素,其中包括了它可以在单套程序,单个数 据库上架设多个门户站剧1 1 。 在i b u y s p yw o r k s h o p 圣诞版发布后的几个星期里,成千上力的丌发人员下载了这 套源程序,并且马上在线建立了基于这套系统的开发中心。0 3 年3 月1 b u y s p y w o r k s h o p v e r s i o n1 0 5 被赋予新的项目名称d o t n e t n u k e 。这个名字,选择了d o t n e tf r a m e w o r k 中的d o t n e t ,并且结合了单词n u k e ,( 意在指出这是一个基于n e t f r a m e w b r k 的开源 的,可用于企业应用的文章管理系统) 。0 4 年3 月d n n2 0 发布,比起最初的版本, d n n 2 0 在核心结构和安全性上做出了较大的修改,在模块,皮肤,数据接口以及本地 化方面提供了更好的扩展性。0 4 年8 月d n n 3 0 发白,新增了例外处理和事件日志的 功能,并率先在核心结构中集成了a s p n e t 2 0m e m b e r s h i pa p i s 引。0 5 年1 2 月d n n 4 0 发钷,此版本完全基于a s p n e t 2 0 技术平台。2 0 0 8 年1 1 月,d n n 5 0 正式发布。 今天,d o t n e t n u k e 依然是一个丌源的项目,并且拥有为之献身的管理团队,研发中 心,在全世界范围内享有4 5 0 ,0 0 0 个注册用户。 3 湖北人学硕fj 何论文 2 2d n n 特点 l 、通用性 d o t n e t n u k e 几乎可以用来构建任何w e b 应用:商务网站,企业内网或外网,在线 内容发布等。 2 、用户友好性 d o t n e t n u k e 设计考虑得非常周全,每个模块都有帮助菜单,用户可以自定义页面 布局。 3 、多网站支持 利用d o t n e t n u k e ,一套程序可以支持多个网站。每个网站都有各自的管理员和独 特的页面布局。 4 、技术支持 d o t n e t n u k e 有一个核心开发团队和国际化的支持社团。d n n 的用户组、论坛、资 源网站以及专注于d n n 技术的很多公司,全方位的提供支持和帮助。 5 、安装简单 从懈,、v d o t n e t n u k e t o m 下载软件以后,按照安装指导的步骤,只需要几分钟就可 以完成网站的安装与部署。 6 、本地化 到目前为止已经有2 7 个语言包,能很轻松的把网站转换成几乎任何语言。语言包 也是可扩展的,用户可以很容易的创建自己的特色语言包。 7 、开放源代码 d n n 是免费、丌放源代码项目,采用类b s d 风格的授权方式。容许任何人按自己 的想法,商业和非商业的使用d n n 。b s d 开源协议是一个给与使用者很大自由的协议。 基本上使用者可以自由使用,修改源代码,也可以将修改后的代码作为开源或者专有软 件再发布。只需要源代码中带有原来代码中的b s d 汾议川。 8 、高扩展性 d n n 内置的功能已经足够构建一个非常复杂的内容管理系统。d n n 提供了全新的 在线式功能块扩展,无论是第三方模块还是自己丌发的模块,都能很容易的加入到i f 在 运行的网站中f 2 1 。 9 、被广泛认同 4 第一二章d n n 发展历史及特点 d o t n e t n u k e 已经是一个商标,得到了开源社区的广泛认同和尊重。d o t n e t n u k e c o r n ( 英文) 已经有超过l7 0 ,0 0 0 的注册用户,d n n c h i n a n e t ( 中文) 已经有超过2 , 6 0 0 的注 册用户。 湖北人。硕何论文 第三章d n n 体系架构 3 1d n n 的三层架构 d n n 系统采用b s 结构,其中服务器端可划分成w e b 服务器和数据库服务器。服 务器端采用面向对象的三层结构,提高了系统的可维护性和扩展性。下图展示了d n n 的整体结构刚3 】: w e bs e r v e rd 目i i a 嘀s es e r v e r 厂p r e s e n t a t i o n b u s i n e s slo酉cd丁ataa c c e s s 广d a t a ll 图3 - 1d n n 体系架构图 其中w e b 服务器端按逻辑可划分成表示层( p r e s e n t a t i o nl a y e r ) ;业务逻辑层 ( b u s i n e s sl o g i cl a y e r ) 数据访问层( d a t aa c c e s sl a y e r ) 。 这种三层架构优点在于 1 、丌发人员可以只关注整个结构中的其中某一层; 2 、可以很容易的用新的实现来替换原有层次的实现; 3 、可以降低层与层之间的依赖; 4 、有利于标准化; 5 、利于各层逻辑的复用【4 1 。 缺点在于: 6 第二章d n n 体系架构 1 、降低了系统的性能。如果不采用分层式结构,很多业务可以直接访问数据库, 以此获取相应的数据,而现在需要通过中间层束完成。 2 、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层 中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和 数据访问层中都增加相应的代码【5 1 。 3 2 界面层 表示层直接面向用户,是客户访问d n n 站点的接口。这一层由以下元素构成【6 】: 1 w 曲表单( w e bf o r m s ) 不同于一般的a s p n e t 网站,需要为每一个网页建立w e b 表单,d n n 中唯一的 w e b 表单是d e f a u l t a s p x ,它是站点的起始页同时也承载了表示层中其它元素,在d n n 站点中起着至关重要的作用。 2 皮肤( s k i n s ) 和容器( c o n t a i n e r s ) 皮肤和容器分别指网页和模块的外观,d n n 采用了装饰器模式使得内容和显示样 式的功能分离,d e f a u l t a s p x 根据用户的设置加载相应的皮肤和容器。 3 模块用户控件( m o d u l eu s e rc o n t r o l s ) 模块是构成d n n 的基本元素,它在表示层的呈现形式是用户控件( m o d u l eu s e r c o n t r 0 1 ) ,d e f a u l t a s p x 通过加载模块用户控件为用户提供访问模块功能的接口。 4 客户端脚本( c l i e n t s i d es c r i p t ) 当表示层和客户端需要更及时和灵活多样的交互时,可以引用用j a v a s c r i p t 编写的 客户端脚本。 d o t n e t n u k e 使用单一的a s p x 页面( d e f a u l t a s p x ) 柬展示所有的控件和内容。 这样做的好处有两个。首先用用户界面管理逻辑集中到了一个单一的页面上,其次是减 少了应用程序的入口,增强了系统的安全性。d e f a u l t a s p x 只有很有限的功能,包含页 面管理的 元素、包含用来放置皮肤的占位符。 当用户第一次访问d o t n e t n u k e 应用程序的时候,首先检查从用户浏览器发来的 u r l 和r e q u e s th e a d e r , 确定所用的皮肤。这个过程需要访问数据库中的s k i n s 表,这个 表里包含了所有的皮肤和容器的使用分配表。核心程序通过有效的对象缓存来减少由于 获取当前皮肤设置而访问数据库对性能的影响【刀。 一旦皮肤确定,相关的用户控件就可以动态的j j | l 载并安置到页面上的占位符上。 7 湖北人。硕p 何论文 每一个使用皮肤的控问都要保存在a d i m i n s k i n s 文件央罩的s k i n v b 文件。这个文件负 责皮肤处理中的所有工作:安全管理、加载内容等。 3 3 业务逻辑层 业务逻辑层由三部分组成:自定义业务对象( c b o ) ;c b o 控制器( c b oc o n t r 0 1 ) ; 抽象类数据提供者( d a t ap r o v i d e r ) 。c b o 完全由属性构成,c b o 控制器则完全由方法 构成。d a t ap r o v i d e r 是数据访问层的父类,包含了一个工厂方法,通过反射技术调用数 据访问层中具体的方法为c b o 提供源数据。d n n 采用d a t a r e a d e r 这个a d o n e t 中的 组件作为数据访问层和业务逻辑层间的数据传输工具,d a t a r e a d e r 是单向只读数据流。 为了减少将d a t a r e a d e r 中的每个字段值赋给c b o 属性的代码量,d n n 提供了名为c b o h y d r a t o r 的专门类,其中的方法f i l l o b j e c t ( b y v a ld ra si d a t a r e a d e r , b y v a lo b j t y p ea s t y p e ) 将d a t a r e a d e r 数据流赋给单个c b o 对象实例;f i l l c o l l e c t i o n ( b y v a ld r a s i d a t a r e a d e r , b y v a lo b j t y p ea st y p e ) 将d a t a r e a d e r 数据流赋给一系列c b o 对象实例【7 1 。 建立中间业务层主要有两方面的好处:一是出于类型安全的考虑;二是降低了表示 层应用程序同底层存储数据间的耦合性。所谓类型安全的问题是指如果直接将 d a t a r e a d e r 中的字段值赋给表示层应用程序变量可能会造成类型不匹配,而且这种错误 是发生在运行时的,在编译阶段无法查错,即造成类型的不安全。建立业务逻辑层后, 可将c b o 对象的属性值赋给变量,这样类型不匹配的问题就不会在运行时才发现,编 译器可以即时发现问题。另一方面,良好的面向对象的设计思想希望应用程序同它存储 数据之i 、日j 的依赖关系不强。业务逻辑层的抽象类d a t a p r o v i d e r f 是起到了降低耦合性的 隔离作用,c b o 控制器中的方法直接调用的是d a t a p r o v i d e r 中的抽象方法,因此当数 据访问层的具体实现发生变化时,业务层的代码无须更改。 3 4 数据访问层 数据访问层的数据访问类是业务逻辑层抽象类d a t ap r o v i d e r 的子类,是对d a t a p r o v i d e r 中的抽象方法的具体实现,提供了访问数据库的具体方法,是与物理数据库 紧密耦合的一层。 第二章d n n 体系架构 3 5 数据提供者 3 5 1 数据提供者模式 d n n 的一个重要的特点是是提供一个能够支持多种数据存储应用程序的扩展。由 于对外部数据存储通信的灵活性和性能的要求,d n n 选择一般的数据存取方法而打造 一个新的应用,这个新的应用主要利用了数据库本地化特征集( 也就是用n e t 管理提 供者、所有的s q l 语言、存储过程等等) 。在选择特殊的数据库访问类时d n n 做了权 衡,为支持的每个数据库平台写一个特殊的数据访问层,因此应用程序也就包含了更多 的代码。数据访问层共享了大量共同的代码,每一个访问层都明确的处理了特殊数据库 应用。 为了简便的应用数据库访问类d n n 选择了提供者模式,这种模式是通过反射的在 应用程序运行时动态地加载正确的( 适合的) 数据访问对象。工厂是这样实现的:先创 建一个抽象类,这个类声明了一个方法,这个方法是每一个数据访问类都必须继承实现 的。对每一个支持的数据库,创建一个具体的实现类,这个类实现了抽象类或“协议” 中定义的各种数据库操作的代码。为了支持在运行时动态加载具体的操作类,在工厂旱 实现了一个i n s t a n c e ( ) 方法,这个方法依赖于提供者类从配置文件读取并反射过来的值 来决定需要加载哪个程序集。由于反射在应用程序性能方面非常耗费资源,所以把数据 库提供者类的构造器储存到缓存旱【7 】。 提供者模式为开发者提供了这样的一种可行性:在对业务逻辑层的业务对象进行业 务逻辑设计时可以不必关心实现这种业务逻辑关系的底层细节。所谓“提供者 ( p r o v i d e r ) ”是指应用程序接口( a p i ) 同业务逻辑之间的约定,这个约定确定了具体 的应用程序接口实现( i m p l e m e n t o f t h e a p i ) 应该提供的功能。为了满足某种业务需求 而调用a p i 中的一个方法时,a p i 的实现就会完成这种需求的实现,而a p i 本身并无须 知道这个需求实现的过程是怎样的。提供者模式是对“面向接口编程”思想的具体实现, 面向接口编柙要求针对接口,而不是具体实现,系统可维护性大大增划7 1 。 实现提供者模式的关键是让应用程序接口( a p i ) 和a p i 实现的分离。具体的晓 a p i 可以是一个抽象类,它不会因为实现它的具体类的改变而变化。因此抽象类a p i 会显示更好的文档结构和扩展性,也更容易被阅读和理解。 d n n 在以下方面用到了提供者模式:数据提供者( d a t ap r o v i d e r ) ;计划提供者 9 湖j 匕人。誓硕i :学位论文 ( s c h e d u l i n gp r o v i d e r ) ;同志提供者( l o g g i n gp r o v i d e r ) ;h t m l 编辑器提供者( h t m l e d i t o rp r o v i d e r ) ;搜索提供者( s e a r c hp r o v i d e r ) ;友好u r l 提供者( f r i e n d l yu r l p r o v i d e r ) 【2 1 。 3 5 2 数据提供者实现 如前所述d n n 在业务逻辑层和数据访问层间应用了数据提供者模式,使得d n n 可以 更换底层数据库而不必修改业务逻辑层的代码。数据提供者的架构图如下【3 】: 数据提供者a p i 厂 致据提供者a p i 实现 广 汐亘 图3 - 2d n n 系统进行数据访问的逻辑流程图 数据提供者模式主要由以下两部分构成: l 、数据提供者应用程序接口( d a t ap r o v i d e ra p i ) 是一个抽象基类d a t a p r o v i d e r 。 2 、数据提供者应用程序接口的实现( i m p l e m e n t a t i o no f d a t ap r o v i d e ra p i ) 具体的 数据库访问类,是d a t ap r o v i d e r 的子类。 实现数据提供者模式的技术关键有两方面:一是如何实现数据提供者应用程序接口 ( a p i ) 和a p i 实现的分离。d n n 将它们分属于不同的组件( a s s e m b l y ) ,分别编译。 当具体的数据库访问类发生变化时,只需对其重新编译而无须重新编译应用程序主体 ( u i 和b l l ) ,提高了系统的可维护性。如d n n 应用程序主体所属组件是 d o t n e t n u k e d l l ,数据库访问类所在组件是d o t n e t n u k e s q l d a t a p r o v i d e r d l l ,当需要将 d n n 的底层数据库更换为a c c e s s 时,只要重新编译新的数据库访问类生成 l o 日一日日 留 劣 q 第- 二章d n n 体系架构 d o t n e t n u k e a c c e s s d a t a p r o v i d e r d l l 。二是如何实例化数据提供者应用程序接口的实现的 对象。如果足业务逻辑层直接实例化,破坏了而向接口编程的原则以及a p i 和a p i 实 现分离的原则。为此需要一个专门实例化对象的类一反射工厂,并采用n e t 反射技术 在运行时才实例化对象。即使用反射工厂方法来实例化具体的数据库访问类7 1 。 数据提供者应用程序接口d a t a p r o v i d e r 不仅是抽象数据库访问基类同时也是实例化 具体数据库的工厂。它提供了实例化具体数据库访问对象的工厂方法。d a t a p r o v i d e r 中的工厂方法是静态过程s t a t i cv i o dc r e a t e p r o v i d e r ( ) 。这个工厂方法调用反射类 中的c r e a t e o b j e c t 函数动态地生成实例对象。c r e a t e * o b j e c t 有如下两种重载形式: 1 d o t n e t n u k e f r a m e w o r k r e f l e c t i o n c r e a t e o b j e c t ( “d a t a ”) : 2 d o t n e t n u k e f r a m e w o r k r e f l e c t i o n c r e a t e o b j e c t ( “d a t a ”,”c r o s s d n n m o d u l e s c r o s s a r t i c l e d a t a ”, “c r o s s d n n m o d u l e s c r o s s a r t i c l e ”) ) : 实现反射的关键是要提供所要创建实例的类型名称。类型名称( t y p e n a m e ) 由两部 分组成,第一部分是包含了完整名称空问( n a m e s p a c e ) 的类名,第二部分是类所在的 组件( a s s e m b l y ) 的名称。上面的两种重载形式对应着两种获得类型名称的方法。 由于采用反射技术在运行时才知道要所要实例化的相关信息,因此这些信息不可以 固化在程序中。d n n 所采用的是在配置文件( w e b c o n f i g ) 中定义了数据提供者应用程 序接口实现的配置信息,并提取这些信息到相应的类中。配置文件中针对不同的提供者 模式定义了相应的节( s e c t i o n ) ,如数据提供者模式所对应的节就是“d a t a ”。以下呈 现的就是配置文件中“d a t a ”节的相关信息: 1 s e c t i o nh a n d l e : ; 2 s e c t i o n : s e c t i o nh a n d l e 的作用一是标明了具体配置节( s e c t i o n ) 的名称;二是在t y p e 属性中提供了提取配置信息对象的类型名称,即位于d o t n e t n u k e f r a m e w o r k p r o v i d e r s 名称空间下的p r o v i d e r c o n f ig u r a t i o n h a n d l e r 类,它所属于的组件名称是 d o t n e t n u k e 。该类实现了i c o n f i g u r a t i o n s e c t i o n h a n d l e r 接口返回p r o v i d e r c o n f i g u r a t i o n 对象,p r o v i d e r c o n f i g u r a t i o n 类中有两个重要的 属性:d e f a u l t p r o v i d e r 和p r o v i d e r s 属性,即对应着d a t a 节中的内容。其中 d e f a u i t p r o v i d e r 属性的类型是字符串,存储了 节d e f a u l t p r o v i d e r 属性值; p r o v i d e r s 属性的类型是哈希表( h a s h t a b l e ) ,存储了 下子节 的信息, h a s h t a b l e 的数据结构是名值对,其名称对应着 节属性r a m e 的值,值则对应着 节所有属性名值对构成的属性集合即x m l a t t r i b u t e c o ll e c t i o n 数据类型。这个 类型的对象是作为p r o v i d e r 类构造函数的参数实例化p r o v i d e r 对象的。p r o v i d e r 对 象提供了三个属性:n a m e ,t y p e ,a t t r i b u t e s 分别对应着 节中的n a m e 属性值, t y p e 属性值,以及其它属性名值对构成的集合即n a m e v a l u e c o ll e c t i o n 对象。具体的 数据库访问类就是通过p r o v i d e r 类的a t t r i b u t e s 属性获得数据库信息的。 在r e f l e c t i o n 类中用第一种方法生成对象时,首先将参数“d a t a ”传递给函数 c o n f i g u r a t i o n s e t t i n g s g e t c o n f i g ,这个n e t 自带的静态函数根据参数“d a t a ”在 w e b c o n f i g 中定位到相应的s e c t i o nh a n d l e ,并调用这个s e c t i o nh a n d l e 返回 p r o v i d e r c o n f i g u r a t i o n 对象o b j p r o v i d e r c o n f i g u r a t i o n 。然后将o b j p r o v i d e rc o n f - i g u r a t i o n p r o v i d e r s ( o b j p r o v i d e r c o n f i g u r a t i o n d e f a u l t p r o v i d e r ) 作为构造函数的 参数实例化一个p r o v i d e r 对象。所要生成的对象的类型名称即由p r o v i d e r 对象的t y p e 属性提供。 第二种方法获得p r o v i d e r c o n f i g u r a t i o n 对象的过程和第一种方法相同。然后将第 二和第三个参数分别加上后缀字符串p r o v i d e r c o n f i g u r a t i o n 对象的d e f a u l t p r o v i d e r 属性值构成所要生成的对象的类型名称。这种方法用于实例化d n n 模块的具体数据库访 问类。由于d n n 模块可由第三方丌发,模块的名称空问和组件名称等可以自定义,不可 能针对每一个自定义模块都在w e b c o n f i g 中定义与其相关的配置信息。因此采用第二 1 2 第二章d n n 体系架构 种方法,只要把自定义的名称空l 开j 和组件名称作为参数传递给反射工厂方法即可得到需 要实例化的类型名称。而d n n 系统的核心功能模块则采用第一种方法。 r e f l e c t i o n 类除了从配置文件提取信息获得类型名称并创建相应的实例外,还将这 个实例放入缓存c a c h e 中以提高系统性能。如果不采用反射技术,只使用一般的工厂方

温馨提示

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

评论

0/150

提交评论