论坛首页 Web前端技术论坛

关于表现层UI设计的一点点见解,欢迎大家讨论。

浏览 31665 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-04-29  
事先声明,我写这个文章时就做好了让大家扔砖头的准备。但是我也是为了解开自己心中的一些疑惑。

现在的表现层技术可谓是百花齐放,由于mvc架构在web应用上大行其道,为了彻底解决表现层的业务逻辑和页面分开的问题,各个框架和解决方案应运而生。由于structs目前的炙手可热,taglib这个东东也跃入了程序员的视野。(虽然taglib是jsp基本的技术之一,但是至少用structs之前我从未使用过这个东东。我想至少大部分也是因为structs才熟悉taglib的吧),webwork还有很多其他厂商的tag,如displaytag等,乱七八糟一大堆,用起来真的很不方便。所以jstl的出现就是为了做一个tag方面的标准,spring不是推崇用这个东西吗,于是现在问题来了。关于taglib到底是否该存在的问题,我把这个专题的所有文章都看了一遍,真是众说纷纭。我不明白大家究竟是出于什么角度??是纯技术的角度吗?感觉好象现在各个技术都想争老大,实际上每种技术都有自己的优缺点,谁比谁强啊。我经常是在用taglib还是用模板,用structs还是用webwork2,还是再去学Tapestry,始终拿不定注意。终于我想通了,下面就是我的看法

在实际项目中,实践才是检验真理的唯一标准。只要是方便,只要不是很影响项目的实施,怎么写还不是人为的么。scriptlet不好么?我觉得只要是逻辑划分的清楚,这么写也没什么不好。各种表现层的解决方案说得通俗一点,就是将只要和业务逻辑相关的,都尽量写到java代码里得了,页面用scriptlet写一样很简单,代码一样少。tag可能要麻烦一点,虽然宣称是逻辑划分的很清楚,但是我也没觉得它优秀在哪里?jstl的<c:forEach>和<c:if test="">,<c:when>,structs的<logic:equal>我就是不知道和<%if{}else{}%><%for(;;;)%>有什么区别,唯一的区别就是一个是在类似html的标签里,一个是用<%%>来扩起的,这个有什么区别么?也许用在重复性的代码上,用tag可能会轻松一点。(但是我一直用taglib,jstl+structs的那些tag,目前还没什么觉得轻松的感觉,只是为了让客户感觉到很高深而已
象velocity,freemaker用的模板技术,velocity用过,freemaker没用过,感觉freemaker的${test.test1}和jsp2.0的el非常象,但我也不明白这样好在哪里?也是业务隔离么?还不是一样要#if...#endif,所以有人说它们起到的业务隔离效果比taglib好,还有什么页面显示效果要比taglib好,可以脱离webcontainer运行,我觉得理由都不是很充分。(velocity也相当与一门简单的页面描述语言啊,和jsp的语言有什么区别呢,我感觉的区别就是jsp是用java写的,语言比较丰富,所以你可以在页面中乱写一气,只要不出错就好。而velocity的页面语言比较少,比较死,所以你不可以乱来。但是jsp控制的好的话也一样可以做到啊,功能多点难道还不好么?你把velocity的#set...等一些标签加到页面里,放到DW下看看,还不是一样乱套,如果做的是b/s项目,你把它脱离webcontainer干什么?吃饱了撑的吗?)可能从实现角度来讲velocity比jsp好点,但是我没研究过,不敢乱评,我只是就事论事。


至于美工的问题,我个人觉得,美工的工作就是做图,再放松一点,可以来做html静态页面,将修改后的jsp页面交给美工去美化本来就是一个极不负责任的做法。(这里有个争论,就是美工的职责到底有多大)。我毕业后写程序已经三年了,换了四个公司(可能有点过分吧 ),一直在做B/S结构的东西,我想国内公司的现状大家清楚的很,作为一个java的B/S程序员,最基本的是需要懂jsp吧,那么会jsp,更基本的html你要不要会??你不会的话会不会有公司要你?大家都知道写java代码很舒服,更知道写页面很辛苦,因为页面的灵活性和可变动性太大,所以就拼命想把这个责任推给美工,交给美工MM去做,实际上这样能行吗?写好代码的jsp页面给美工去做,至少我不放心,毕竟,美工不懂代码,而且你也无法预料这个页面交给美工去做会到底变成什么样子。Tapestry虽然隔离的比较好,但也是写到了html代码里,你敢保证美工换页面的时候会把你的页面不改掉么?如果改掉了,你再让美工去重新做,这么一来二去的,有几个人象你这么搞,所花的时间肯定比自己亲自弄要慢几倍。(毕竟美工就1,2个人而已)Tapestry给我的感觉就象是javascript的设置一个<div id="aaa">或者是DataIsland那样,如果这个标记没了,页面数据可也就没了哦。

所以,就我上面阐述的结果,无非分成:
jsp(包括使用taglib和直接使用scriptlet)和模板(使用自定义的标签如velocity等)两种(可能还有别的,我不清楚)

可是无论哪一种,你都逃脱不了在页面中嵌入与程序有关的代码,这里只是代码以一种什么形式插入到页面上什么地方的问题。但是有一点要注意,无论怎么嵌代码,美工都是绝对不可以参加这部分工作的,前提就是她不懂,而且这样也不属于她工作职责之内的。国内不就是这样吗,美工薪水本来就不高,还要搞这么多东东,把MM累坏了你不心疼啊。谁不知道只写java代码舒服啊,只要客户不提新需求,你的java代码基本就不会有大的改动。页面就不一样了,客户经常要求动一些小细节,难道你都要让美工去做?那你这个高工资也拿的太舒服了吧。在国内,要求B/S程序员懂html是必须的,公司这么要求干嘛?你不来干谁来干呢?(我干了三年B/S编程,同时搞了三年的页面编写,在页面处理上可是感触颇多啊,大家都亲切的称我是页面工程师 ,呆的这几个公司,其中也有两家还算是大型的公司,中国软件百强的企业,还不是一样的要自己改页面。因为有的时候美工的想法和你设计的并不完全一样,而且她对页面的布局,处理后的html页面你也不会直接拿到项目中来的,否则肯定不会适用的,不信你可以试试。我最初的一个公司美工连切图都不做,还要我们自己的模块自己切相应的图呢,很BT吧,嘿嘿,我当时可是痛苦的一塌)

所以,现在给我的感觉是,无论哪种框架,恐怕都不能很完美的解决表现层的问题,要想做到美工和开发人员的隔离,只是一个分工意识上的问题。就看你怎么想了。
1。如果你赞同了我的观点,那就意味着你要自己去做页面,但这样就不存在什么表现层页面是否失真的问题了,这一切都由你来调整,而你是最适合,也是最懂应该怎么嵌入的。(或者除你之外,专门找一个这样的页面工程师来帮你弄,不过在国内你就别指望了,这是苦力活,而且工资待遇又不会很高,相反要求这种人还要有一定的技术功底,哪个傻瓜会这么做啊?)
2.如果你不赞同,而是积极支持美工去做的话,你可能就无法预料到和后果是什么样子的了。工期是否会加长也就不好说了。

因此,我觉得用taglib也好,用velocity也罢,哪怕直接用scriptlet都行,只要是能把项目交工就成了呗,毕竟实用才是最有价值的嘛。(敢情我用taglib就是为了让用户觉得这个东西挺难的,自己实在没发现什么优势,嘻嘻)

这又让我想起了structs与ww2之争,本来我都已经准备放弃structs改学ww2了,ww2学到一半的时候跳槽,新公司要用structs,我有什么办法呢?单从技术角度来将的确ww2设计的要好,但是那也得有个主流的问题啊,谁让structs先火起来,会用的人这么多呢。所以,如果我要是自己再弄的话,我肯定还是会选用structs+hibernate+spring,ww2最多最多只是自己练练手而已,绝对不会拿它来做试验玩火。

以上是我的一点个人看法,文笔不好,写得可能有点乱,但这是我这几年来的一点总结,欢迎大家讨论和指点。
   发表时间:2005-04-29  
使用tag最关键的是封装为自定义tag, 这样抽象级别提高了。符合xml语法之后可以应用xslt变换。
实践证明,使用tag可以在很大程度上实现美工和程序员工作的分离
0 请登录后投票
   发表时间:2005-04-29  
Tapestry的组件思想很是不错 最近死肯Tapestry
感觉组件的积累就是自己的财富

美工一般不会更改已经定义的标签的
0 请登录后投票
   发表时间:2005-04-30  
我觉得现在很多人都已经陷入一个误区,看见大家力捧什么项目,就去学习那个项目(我就是这种人,嘿嘿),学了半天,累的够戗,才发现真正做项目的时候用不上(也不大敢用)。我感觉现在学东西就是做一个技术上的积累好了,或者学一下它的思想,实际上真正做项目,选框架的时候,大家可千万要有自己的主见,从现实角度出发来做,这样也是比较稳妥的做法。不要人云亦云。我就曾经在用structs还是ww2,用tag还是不用tag,是否用velocity等苦恼了好几天。到处找资料去看它们的优缺点,但最终还是决定用最老的老路,也就是structs+jstl。

canonical 写道
符合xml语法之后可以应用xslt变换。
实践证明,使用tag可以在很大程度上实现美工和程序员工作的分离

不知道如何来做xslt变换呢?
另外,如果用xsl,那firefox也支持xsl吗?是否兼容性有问题呢?好象我还没听说过。

我在文章中说了,如果你选择了我认为的第一种方法的话,就不存在美工与程序员之间的分离这个说法了。虽然这个方法不是什么好方法,但是我觉得还是有它存在的理由的。而且我觉得你说的用tag可以显示这种分离,我觉得这个理由也不是很充分。举个实例来??难道<>和<%%>就有那么大的区别么??
0 请登录后投票
   发表时间:2005-04-30  
giginet 写道

你把velocity的#set...等一些标签加到页面里,放到DW下看看,还不是一样乱套,如果做的是b/s项目,你把它脱离webcontainer干什么?吃饱了撑的吗?)可能从实现角度来讲velocity比jsp好点,但是我没研究过,不敢乱评,我只是就事论事。


脱离webcontainer的用途:可以用在 静态发布出版 领域。生成一套静态HTML文件,比较方便。

不影响页面显示的java template tech 有:
(1) jivan, xmlc  毫无杂质,pure html
(2) fastm  类似于php lib, 用xml comment 标记page block
(3) tapestry, wicket 用 html tag 标记page block.  for, if, else 多了之后,也会影响显示。
0 请登录后投票
   发表时间:2005-04-30  
引用
不知道如何来做xslt变换呢?

符合xml规范之后,就有作xslt变换的可能。具体怎么做,当然自己想办法了,呵呵。而且符合xml规范可以与其他xml技术集成,例如cocoon。
不过我所指的tag技术是我们自己的tpl技术,而不是jsp tag.

引用
另外,如果用xsl,那firefox也支持xsl吗?是否兼容性有问题呢?好象我还没听说过。

firefox当然支持xsl, 没有问题,但调用接口稍有不同。


引用
难道<>和<%%>就有那么大的区别么??

这两者之间当然没有区别。但是&ui:FlexGrid headers="a,b,c" data="${data}" /&和 for each循环就有区别了。
关键是循环和判断可以被封装在有意义的自定义tag内,提高抽象级别。这样一块动态内容就和一张图片一样,美工知道往哪里摆就可以了。
0 请登录后投票
   发表时间:2005-04-30  
buaawhl 写道

脱离webcontainer的用途:可以用在 静态发布出版 领域。生成一套静态HTML文件,比较方便。

我觉得用URL获取连接,然后用jspwriter获取jsp页面,也是可以生成html页面的嘛
buaawhl 写道

jivan, xmlc 毫无杂质,pure html
真的这样吗?比较感兴趣,有空揣摩一下。


canonical 写道

关键是循环和判断可以被封装在有意义的自定义tag内,提高抽象级别。这样一块动态内容就和一张图片一样,美工知道往哪里摆就可以了。

我还是难以接受,难道进入了<>美工就看明白了??
<%if(a=b)%>
<font color="red">123</font>
<%}%>

<c:if test="${a}==b">
<font color="red">123</font>
</c:if>
这个有什么区别吗?区域还是那样啊,只是里面的内容不同罢了。美工MM还要现去学tag吗??而且变成了这个之后,美工就可以知道往哪里摆了??
0 请登录后投票
   发表时间:2005-04-30  
引用
区域还是那样啊,只是里面的内容不同罢了

你没看懂我所谓抽象的意思。

如果是这样
<app:如果存在附件>
...
</app>

这样美工看不懂吗
0 请登录后投票
   发表时间:2005-04-30  
canonical 写道
引用
区域还是那样啊,只是里面的内容不同罢了

你没看懂我所谓抽象的意思。

如果是这样
<app:如果存在附件>
...
</app>

这样美工看不懂吗


问了美工mm,她说看不懂。她问能不能不写</app>,因为html可以不写的。

另外,抽象到这个样子了,也比较丑陋,其实无非就是tld对应中是中文嘛,java程序的函数和变量名都可以是中文啦,难道你期望美工看懂?
0 请登录后投票
   发表时间:2005-04-30  
完全同意andyyehoo,而且甭指望美工去帮你弄html。美工可以不了解甚至完全不懂html,她只要能做出图来,再好一点的美工用dw帮你生成静态页面(利用dw而不是手工弄html)。而b/s程序员确是必须要会html的,这点大家都没疑问吧?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics