用户操作
[即时聊天] [发私信] [加为好友]
wanghailongID:buaawhl
102521次访问,排名919,好友0人,关注者1人。
buaawhl的文章
原创 49 篇
翻译 0 篇
转载 0 篇
评论 152 篇
最近评论
bruce_lau:看看这个解决方案,对象的缓存和jive差不多,列表也是选id,但是对列表还有缓存,还可以根据字段作散列列表缓存,这样列表的缓存命中率非常高,是一个比较好的数据库缓存解决方案。参见http://shedewang.com/akaladocs/api/com/akala/dbcache/core/BaseManager.html
yipeng6213:个人觉得fastm真的很不错,我之前的模板是用velocity写的,我现在想把它转换成fastm的,但其中velocity模板中的if elseif else 怎么 用fastm替换呢?请问有没有具体的实例 给我参考一下,急!
lidaoguang00109:谢谢您的努力.
这个FastM我使用过了,觉得很不错.
容易上手,特别是可以直接用HTML观察模版的布局形态,有利于界面效果的评估.
现在有一个问题一直困扰我.
就是如果实现一个Table,每一个列被点击后都能排序,用FastM如何实现呢?每一次ValueSet DOM都要重新设置吗?
vkuja2003:楼主做学问的方法很值得学习
noia_zhou:我拜读了你的持久层和cache设计的一些文章,觉得想法很不错。我觉得现在的持久层框架还是挺复杂的,如hibernate等,单看看它10几兆的开发包就知道了,我的初步想法是利用po跟table的字段一致性,通过反射po得到要执行的sql。这样做的好处是少了很多表结构的配置文件。然后做一个简单dao来完成。这里我的想法是做两个dao,一个BaseDao,BaseChaheDao。其中两者都是 继……
文章分类
收藏
    相册
    友情blog
    http://smsbim.bokee.com/
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

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

    新一篇: Web显示层技术评估; Iterator vs Visitor, Pull vs Push | 旧一篇: Web显示层技术评估 -- 5.Scripted Template, 6, Template Manipulation, 7, Model Match, 8. 特性总表

     

    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.charpter1”>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显示技术的总结和展望。

    本文到这里结束。

    发表于 @ 2006年07月14日 14:47:00|评论(loading...)|编辑

    新一篇: Web显示层技术评估; Iterator vs Visitor, Pull vs Push | 旧一篇: Web显示层技术评估 -- 5.Scripted Template, 6, Template Manipulation, 7, Model Match, 8. 特性总表

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © buaawhl