DNN皮肤制作官方文档《DotNetNuke Skinning Guide 》翻译(1)—换肤系统需求分析和设计部分-阿里云开发者社区

开发者社区> 264971589117404837> 正文

DNN皮肤制作官方文档《DotNetNuke Skinning Guide 》翻译(1)—换肤系统需求分析和设计部分

简介: 介绍 使用术语 实现技术 系统定义 DotNetNuke改进 介绍 传统的专业网站设计公司主要依赖设计静态网页生存,然而,随着低费用的门户网站应用程序出现,消费者很快尝到了动态网站的甜头。为了适应新的需求,网页设计者需要时刻关注这些新技术的发展。
+关注继续查看

介绍
使用术语
实现技术
系统定义
DotNetNuke改进


介绍

传统的专业网站设计公司主要依赖设计静态网页生存,然而,随着低费用的门户网站应用程序出现,消费者很快尝到了动态网站的甜头。为了适应新的需求,网页设计者需要时刻关注这些新技术的发展。DotNetNuke中的换肤系统可以让专业的网页界面设计者创造出与底层门户应用程序无缝结合用户界面,开发出具有强大功能而在视觉上又满足客户需要的web站点。

词汇“换肤(Skinning)”指的是一种可管理的软件架构,这种架构把应用程序的逻辑和内容与它的外观分开。这种“形状”与“功能”的抽象方式也被称之为两层表现模式。程序的逻辑和网页的外观是分开的,并且可以单独的设计和修改。这样,软件开发人员和网页界面设计人员就可以同时工作而不用担心会相互牵扯。


ASP作为一种RAD工具如此受欢迎的主要原因是ASP Script可以插入平常的HTML代码中,从而使静态的HTML代码变成动态。这个特点使ASP可以快速的写出从一个数据库(或者其它外界数据源)动态生成网页的应用程序,最终构成一个强大的网站。


然而,这种易用性也是要付出代价的。大部分ASP网站包含了大量HTML代码和ASP Script混杂在一起的页面,这些页面难以阅读和理解,更难以维护。当网页设计者要修改用户界面时往往会遇到难题。因为表现层的代码和ASP Script是混在一起的,只有网站界面设计者和网站程序设计者一同工作才能确保修改成功,这耗时耗力还耗钱。


换肤使用“模板(templates)”把外观和版式与网站的逻辑分开。一个设计精巧的换肤系统会把模板和最终的网站捏合在一起。在维护网站时,这种两层结构可以使程序开发人员和界面设计人员独立的维护各自的部分,这样在网站发布后的维护阶段,可以节省大量的时间和精力。


当然,换肤也会给你网站带来一些复杂性,把多个文件合成一个网页是一项非常影响效率的事,更不用说代码开发人员还要学习如何把功能的部分抽象出来,让界面的代码分离出去。所有的这些问题都可以通过技术和良好的皮肤构架得到缓解。

使用术语

术语“换肤”不同的人有不同的理解,一般的情况,换肤系统提供一个固定的版式,允许我们更改配色、风格甚至可以更换图片。更高的要求是,除了本身存在的内容,皮肤可以让我们自由地定制用户界面的每一个地方。在这两种极端之中,还有很多不同的方案,不同的需求决定如何取舍。


Windows桌面应用程序很早就可以“换肤”了,你会以为网站也可以完全达到桌面应用程序的效果,这种想法是错误的,
因为桌面应用程序和网站有天然的不同,桌面应用程序的皮肤是储存在本地的,可以实现非常华丽、多样的效果而不用担心效率上的问题。但网站的每一次页面请求都要把皮肤与内容组合再通过网络传送到客户端,这就要求一个高效的渲染系统。

实现技术

把用户界面从网页上抽象出来有很多方法,不同的方法对界面和业务逻辑的分离成度不同,所以,在何时对程序的哪个部分如何分解成为了关键。


把用户界面文件中需要动态生成的部分用占位符(tokens)或者标记(identifiers)来表示是很多脚本语言常用的方法,但页面被处理时,这些占位符被实际的程序逻辑所取代。我们先不讨论取代算法(比如智能解析、字符串函数、正则表达式等等……)的效率,对于网页应用程序换肤最重要的一点是“什么时候这个处理进行“,如果对于请求的每一页都要进行这种处理,效率将会受到影响。为了降低这种影响,我们可以使用预处理和编译的方法。


ASP.NET提供了非常强大的功能用来把网页抽象成各个不同的部分,用户控件(User Controls)和ASP里的#include 功能有点像。用户控件使你能把界面上重复的功能独立出来并用在其它的页面上。一个用户控件几乎和一个aspx网页一样,只是两点不一样:一个是扩展名为.ascx,而不是.aspx;二个是没有<HTML>, <Body>或者 <Form>标记。用户控件可以再被分为表示层的文件,应用逻辑文件(或者程序代码文件)等多个文件。这种功能允许创建多个表现层的文件并指向同一个程序代码文件。因为ASP.NE是一种预编译语言,由多个用户控件组成的网页合成并渲染是非常高效的,比非预编译和解释语言要快多了。

系统定义

换肤系统设计要考虑的另一个方面就是如何让作者署名,那些人会制作皮肤?要制作出皮肤,这些人对皮肤技术上的实现需要了解多深?这些人会是用什么样的工具?这些方面的需求分析对皮肤如何定义起很大的作用。


尽管ASP.NET的用户控件给我们提供了一个解决问题的核心的技术,但却是一个相对较新的概念,并且只对使用Microsoft开发平台人比较熟悉。尽管很多网页设计工具(如FrontPage、Dreamweaverd等等)支持用户控件,但对很多专门做网页界面设计的设计者来说,用户控件还是很陌生。更不用说用户控件还包含一些ASP.NET的服务器端控件,这些控件对网页界面设计者来说完全不必接触。我们必须考虑在制作皮肤过程中,网页界面设计者很有可能无意修改或者删除关键的服务器端控件,只是绝对要避免的。最理想的方案是,网页界面设计者可以自己选择设计工具并且完全不用了解用户控件的技术知识。


根据上面的分析,换肤系统要给网页界面设计者提供一个最简单、通用的方法设计皮肤。HTML是因特网最原始的语言,并且被各种工具广泛的支持。唯一的问题是HTML是静态的,但皮肤是动态的。


回想一下之前提到过的占位符方法,网站开发人员使用这种方法在HTML里用占位符表示动态的功能用。“外观”和“功能”区分的很清楚。用户界面的修改不会影响到程序的逻辑,程序逻辑的修改不会影响到用户界面。使用这样的两层结构的唯一坏处就是影响性能。

DotNetNuke改进

DotNetNuke 1.0.0 到 1.0.10提供了一个非常简单的换肤功能,可以允许你更换logo、颜色还有风格来简单地定制一下网站。很快,这个简单的换肤功能就不能适应需要了,好几个项目被建立用来开发一个更加健壮的换肤系统。
不幸的是,随着事情的发展,不同的人对什么是最好的解决方案有不同的意见。很快,DNN社区里面就出现了很多不同的换肤解决方案,各种方案各有优劣。DotNetNuke必须从这些方案里选择一个作为核心方案。但对于我们之前描述的那些商业需求,没有一个解决方案是可以完全满足的。所以,我们必须谨慎地提出一个比较全面的设计草案,并引导开源社区的开发人员去完善这个草案。

DotNetNuke 2.0 对核心框架进行了一次大的改写,但主要集中在数据存储层和业务逻辑层。这次改写促使我们认识到完善换肤系统的重要,并最终完成了这个稳定的换肤系统,这个系统清晰的把“表现”和“功能”分开了。下面就要开始详细的讲解具体的技术实现细节。

====未完,待续====

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DNN系统构架图
网上收集的DNN系统构架图,对理解DNN的整体构架很有帮助,作者不详。
573 0
借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制
原文:借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制 本文所示例子是借助第三方设计软件,制作复杂的矢量图形,转成与XAML酷似的SVG,再转换成xaml而实现的。
889 0
Web系统下Office文档的处理
在web环境中,我们经常遇到需要对Office文档进行各种各样的处理,如:格式转化、统计、修改等各种操作,如果使用Office的客户端对象模型直接处理,一般会遇到:效率低;服务器资源负载大等一系列问题,毕竟Office对象实现时主要针对的是客户端的使用而设计的,对于批量和大负载的处理自然效率欠佳。
756 0
Web系统下Office文档的处理 之OpenXml应用分类资料
本文对常见的处理参考和工具提供一个简要的参考。 对于实际的解决方案参考如下地址(有很多的分类知识) http://blogs.msdn.com/b/ericwhite/archive/2008/10/20/eric-white-s-blog-s-table-of-contents.
892 0
重要通知 | Windows系统高危漏洞修复方案
4月14日,境外黑客组织公开了一份包含多个Windows远程漏洞利用工具的机密文档。为确保云上用户的业务安全,阿里云在4月15日早上九点半发布了漏洞公告及修补措施,以确保用户不受漏洞影响。
7057 0
AKKA文档(java)——角色系统
角色是封装了状态与行为的对象,它们通过交换放入接收者信箱的消息实现两两之间的通讯。从某种意义上说,角色是最严格的面向对象编程,不过最好还是把它们当作人来看待:当用角色为一个方案建模时,想象有一群人,并给他们分配了任务,他们在一个组织结构中发挥职能作用,并想象如何做到故障升级(就像在不需要考虑实际利益的情况下与人打交道,也就是说我们不需要关心他们的情绪变化或道德问题)。
1210 0
CEGUI的事件系统分析
当客户向事件系统发送了一个事件之后,即是执行EventSet::fireEvent. EventSet::fireEvent首先执行了GlobalEventSet:: fireEvent,而后才执行其自身的一个方法EventSet::fireEvent_impl,该方法才是真正进行事件处理的方法,由该方法的后缀impl即可得知了.
1366 0
342
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载