`
k_lb
  • 浏览: 821457 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

Web显示层技术评估 -- 9.Browser Side, 10, Unobtrusive, 显示逻辑AOP, 多语言支持的终极解决方案, 总结与展望

 
阅读更多

Browser Side

Server Side的技术格局恰好相反, Browser SideHTML DOM Manipulation技术、HTML View Model技术比较多,比较流行。各种JavaScript UI控件,DOM绑定控件,这方面的库很多,而且很酷。这里不再列举了。

Browser SideScripted Template技术就比较少见了。我知道的大概有下面几个。

TrimPathJST

http://www.trimpath.com/project/wiki/JavaScriptTemplates

语法举例

<option value="${country.name}" {if country.name == currCountry}selected{/if}>

Helma

http://dev.helma.org/Wiki/JavaScript+Template+Engine/

语法举例

<% if (session.user != null) %>

Hello <%= session.user.name %>

<% else %>

<a href="/login">Login</a>

<% end %>

SWATO

http://swik.net/SWATO/Swato+JavaScript+Template

语法举例

#for (i in products) {

# var p=products[i];

<td>$<%p.price%></td><td><%p.quantity%> : <%p.alert%></td>

</tr>

#}

以数据为中心的Ajax应用中(把数据取过来,而不是取一段HTML,或者一段Script),当页面布局结构比较复杂的情况下,也可以选择Browser Side XSL

一个有趣的联想是DOMPlus的思路。

DOMPlus不仅支持DOM + DOM = SAX,而且支持DOM + DOM = DOM

这个特性特别适合于Browser Side。假设存在DOMPlusJavascript版本。

JavascriptServer Side拿来XML Data,和Browser里面的一段HTML进行一下Match,显示就搞定了。不需要写任何代码。

Unobtrusive

Brower Side方面,Scripted Template技术并不流行。

这个事实说明了,Browser Side的显示技术更加归于常态,显示模型更加自然。

JavaScript编程有个流行的概念,叫做Unobtrusive,就是我们常说的无侵入性。

JavaScript, HTML, CSS清晰有效的分开。

行为的归行为,内容的归内容,风格的归风格。

凯撒的归凯撒,上帝的归上帝,人民的归人民。

各自照看好自己的领域,而不侵入他人的领域。

无侵入,POJO等概念,在Server Side方面(比如Java),也是甚嚣尘上,炒作的不亦乐乎。

但是在Web显示技术的方面,Unobtrusive无侵入特性,不能不说,Browser Side由于先天的JavaScript操作DOM的优势,已经走在了前面。

虽然JavaScript作为一门动态语言,开发效率自然超过强类型编译语言,但是代码维护、IDE提示、辅助重构方面的成本也不可低估。

所以,Server Side的显示技术,仍然是不可缺少的。在Server Side同样应用Unobtrusive原则,也仍然具有重要的意义。

前面提到的两个指标,Template Purity模板纯净度, Action Code Purity用户代码纯净度。

就属于Unobtrusive指标。

显示技术里面,代码逻辑表示动态部分,复杂部分;Template表达静态部分,简单部分。

所以,人们更加关注代码逻辑的容易管理的程度。

由于代码逻辑在IDE里面相对容易管理。人们更能够容忍Java 或者Java Script代码里面出现具体的Template Node,而觉得Template里面的Script比较难以管理。

Scripted Template基本上是Obtrusive的,对Template的侵入性最强。虽然Template操作没有侵入到Java 或者 JavaScript代码。

这叫做 1 -- Way Obtrusive

Template Manipulation大致能够做到对TemplateUnobtrusive非侵入,虽然他们的Template Node操作侵入了Java 或者Java Script代码。

这叫做1-Way Unobtrusive

Model Match技术具有最好的Unobtrusive非侵入特性。Java或者JavaScript代码不侵入Template到里面,具体的Template Node操作也不侵入到Java或者JavaScript代码里面。

这叫做2-Way Unobtrusive

Fastm, DOMPlus是天生的Model Match, 具有2-Way Unobtrusive特性。

Wicket也是天生的Model Match,大致能够做到 1.5 -Way Unobtrusive

如果严格限制不采用Logic Taglib, Tapstry Logic Tag,那么TaglibTapestry也能够做到1.5 – Way Unobtrusive.

显示逻辑AOP

这个需求主要包括页面数据类型的统一格式化。

比如,所有类型为Date,名字以Time结尾的数据(startTime, endTime等),都显示到秒钟;Day结尾的时间字段(registerDay, birthDay),都显示到天。Period, Quarter, Year结尾的字段也都有不同的显示需求。

能够支持自定义显示逻辑AOP Interceptor的技术并不是很多。

XSL语法天生就是AOP语法,DeclaringPattern Match,用法就是要求程序员编写Interceptor

Fastm, DOMPlus对这方面也支持的很好。同样是采用自定义Interceptor

W3DOM Level 2规范定义了DOM Traversal

http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/traversal.html

DocumentTraversal, TreeWalker, NodeIterator, NodeFilter

使用Pull模型(SAXPush模型)处理XML的程序员,可以使用NodeFilter来过滤掉不需要显示的节点。NodeFilter毕竟只是一个Filter,只能对Node内容进行简单的开关选项处理,YES, or No,显示或者不显示。只是作为DocumentTraversalwhatToShow参数的一个补充。AOP能力很有限。

多语言支持的终极解决方案

多语言支持,也叫做国际化,本地化。

一般采用字典文件的做法。比如,dict.en, dict.cn, dict.fr, dict.de, dict.jp等。

在这类做法里面,Template里面通常都只有Message Key

<span>< message key=”name” /></span>

有些更好的做法是这样,提供缺省文本信息。

<span id=”key.name”>用户名称</span>

这样能够保持页面的一目了然。

除了字典文件的做法之外,另一种做法是直接把文字资源,存放到Template里面。

然后分多个目录。En, cn, fr, de, jp等目录,下面全都是对应的Template文件。

这种方案叫做语言目录方案。

这种方案的缺点很明显,一个文件的改动,要扩散到所有的对应文件中。

这种方案的优点也很明显,文件内容一目了然,尤其是支持所见即所得的模板。另一个优点就是运行效率。字典文件方案运行的时候,需要进行大量的查字典,动态替换文本工作。而语言目录方案的模板里面大部分都是静态文本。

有没有一个两全其美的方案?答案是,有。

首先,我们采用自己的母语(比如,中文)作为主模板文件,都放在cn目录下。

然后,其中需要多语言的文本信息,都采用下面这种方式包装起来。

<span id=”key.name”>用户名称</span>

<p id=”key.help.charpter<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1" unitname="”">1”</chmetcnv>>long text about system help</p>

这时候,Template仍然保持了所见即所得的特性。然后,我们根据这些Key,做其他语言的字典文件。Dict.en, dict.jp, dict.fr, etc.

然后我们用一个文本处理引擎,替换掉这些多语言信息。为每一种语言产生一个目录,下面都是对应的语言的Template文件。比如,en, jp, fr, Template文件目录,里面都是对应的填充了内容的模板。打开一看,一目了然。

当然,这个处理过程中,并没有影响那些动态数据部分,而只是替换了静态文本部分。

每次只需要更改主要语言目录的文件,然后用引擎处理,变化自动分布到其他语言目录。

这种技术的关键在于,Template本身是否可再生资源?能否被多次处理?能否被统一处理?

有几种技术是具有这种可能性的。

Taglib理论上可以被当作XML文件处理,具有理论上的可行性。

Fastm, DOMPlus具有现实可操作性。Fastm, DOMPlus都可以自定义标签,处理动态部分的同时,也能够忽略其他动态部分。

总结与展望

本文分析了Web层显示技术的各类指标和特性。

本文的讨论目前还只是局限于一般的B/S结构。

Web Service, SOA代表了Web未来发展的趋向。数据整合,流程整合,各类资源整合。

界面UI也不会限于HTML一种,XUL, XAML, SVG, RSS等也有各自的应用。

我们都知道Web中有一种“盗链”的现象。

一个网站,不是通过Copy,而是直接通过Link引入了其他网站的资源,比如CSS,图片资源等。这样可以节省自己的Server资源。

有些技术更狠,能够抓取别人的页面内容,剪贴拼凑之后显示在自己的网页上。

这种情况实际上是一种偷偷摸摸的不被允许的资源共享实践。

Web Service把这种实践发展成了一种商业模式,资源共享模式。不仅可以共享数据和资源,而且可以共享内容和服务(比如Portlet)。

比如,Web Service Remote Portal,就是一种内容提供模式、服务提供模式。网站流量不再依靠用户点击率来计算,而是依靠Web Service调用率。

我们来看看,能够共享的资源有哪些。

CSS, 图片,JavaScript等可以直接Link过来;数据、内容可以抓取过来。

其中以CSS的共享最为流行。CSS + 图片 + 某些文字替换,组成了一个Theme(显示主体),或者Skin(表观)。很多人津津乐道,并孜孜不倦地谈论、应用、提供各种Themes, Skins

但是还有一个重要的资源共享没有得到充分的发展。就是Template Layout的共享。

目前,Web ServerTemplate资源,一般都存放在自己的文件系统中。

假设这样一种方式。

一个Web Server运行的时候,通过Web Service获取数据,通过Link引用CSSJS,图片等,通过XLink + XPointer + XPath获取一份XML Node or Fragment or Text,作为Template Layout,自己的服务器上只需要一份Display Logic把这些东西组装起来,就可以把页面发布出来。甚至Display Logic也可以从Web Service获取(Script等,当然这里面涉及到安全问题),自己只负责统筹管理安排调用。

这种模型对于Web Service Client来说,也是适用的。

这种模型的关键就在于,Unobtrusive。所有领域都是清楚地分开,Domain Specific,决不侵入到其他领域,也不允许其他领域的侵入。

以上是我对Web显示技术的总结和展望。

本文到这里结束。

分享到:
评论

相关推荐

    jquery.unobtrusive-ajax.min.js

    Ajax.BeginForm 提交,需要引用此文件才会执行OnSuccess

    前端项目-jquery-validation-unobtrusive.zip

    《前端项目中的jQuery Validation Unobtrusive技术详解》 在前端开发中,验证用户输入的数据是必不可少的一环,它能够确保用户提交的信息准确无误,从而提高应用的稳定性和用户体验。"前端项目-jquery-validation-...

    前端项目-marker-animate-unobtrusive.zip

    总结,“marker-animate-unobtrusive”项目展示了前端开发者如何巧妙地利用现有技术实现地图标记的创新。通过理解并掌握这些技术,开发者可以为自己的项目增添更多动态元素,提升用户交互体验。无论是地图应用还是...

    jquery.validation.unobtrusive.js

    在原始库的基础上增加多校验提示框支持。如下: &lt;title&gt;validation test .icon-ok { background: url(./images/icon-ok.png) no-repeat center; width: 16px; height: 16px; display: inline-block; } ....

    jquery.unobtrusive-ajax.rar

    总之,jQuery Unobtrusive Ajax是现代Web开发中的一个强大工具,它简化了Ajax集成,使开发者能够专注于业务逻辑,而不是繁琐的DOM操作。通过深入学习和实践,你将能够创建出高效、优雅的Web应用。

    jquery.validate.unobtrusive.js

    微软的jquery.validate.unobtrusive.js验证插件,可以用来验证单选和多选框的.

    rails-chm-2-0-2.rar

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一个开源Web应用程序框架,它基于MVC(模型-视图-控制器)架构模式,用于快速开发动态网站。Rails以其“约定优于配置”(Convention Over ...

    jquery-validation-unobtrusive-master

    总结来说,jQuery Validate 和其无侵入式版本是开发高效、用户友好的Web表单验证解决方案的重要工具。它们简化了客户端验证的过程,提升了应用的质量和用户体验。对于ASP.NET MVC开发者来说,jQuery Validate ...

    jquery.validate.unobtrusive.min.js

    jquery.validate.unobtrusive.min.js 文件很小,加载速度快 jQuery验证控件

    Unobtrusive JavaScript date-picker widgit汉化版

    Unobtrusive JavaScript,也被称为"Declarative JavaScript"或"Unobtrusive DOM scripting",是一种编程技术,旨在将JavaScript代码与HTML结构分离,提高网页的可维护性、可访问性和性能。这一方法强调使用数据属性...

    jquery-ajax-unobtrusive:[维护模式

    jQuery简洁的Ajax jQuery Unobtrusive Ajax库通过添加对通过Ajax调用将HTML替换选项指定为HTML5 data-*元素的支持,对jQuery Ajax方法进行了补充。 该项目是ASP.NET Core的一部分。 您可以在仓库中找到ASP.NET Core...

    jQueryUnobtrusiveValidate:关于 jquery.validate.unobtrusive.js,qtip ..

    总结起来,jQuery Unobtrusive Validation和qTip是提高Web应用表单验证体验的有效工具。前者通过HTML5数据属性实现无侵入式的客户端验证,后者则提供了丰富多样的提示效果。结合使用这两者,开发者可以构建出既美观...

    jquery.wizard:带有 Unobtrusive API 的轻量级 jQuery 向导插件

    - **高度可定制**:`jQuery Wizard` 支持自定义样式和行为,可以轻松与现有的 CSS 框架(如 Bootstrap)集成。 - **事件驱动**:提供丰富的事件系统,允许在向导的不同阶段进行精确控制。 - **回退支持**:用户可以...

    webservice asp.net mvc3

    【标题】"webservice asp.net mvc3" 指的是使用ASP.NET MVC3框架构建的Web服务。ASP.NET MVC是一种模型-视图-控制器(Model-View-Controller)框架,它允许开发者构建可测试、可维护的Web应用程序。在MVC3版本中,...

    JavaScript权威指南(第五版).chm

    Part IV is a reference for client-side JavaScript, covering legacy web browser APIs, the standard Level 2 DOM API, and emerging standards such as the XMLHttpRequest object and the &lt;canvas&gt; tag. ...

    基于ASP.NET MVC 3的企业应用项目总结

    - **多语言支持**: 使用微软官方推荐的多语言解决方案 ##### 架构特点 - **多层架构**: 项目采用了基于.NET平台的多层架构,确保了良好的可维护性和扩展性。 - **前端展现**: 使用了Telerik for MVC组件,提高了...

    javascript.the.definitive.guide.5th.2006(英文版)

    Part IV is a reference for client-side JavaScript, covering legacy web browser APIs, the standard Level 2 DOM API, and emerging standards such as the XMLHttpRequest object and the &lt;canvas&gt; tag. ...

Global site tag (gtag.js) - Google Analytics