`
argan
  • 浏览: 126151 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MVC中被忽略的View层

阅读更多

现在市面上这么多的java web 开发框架,struts2,spring mvc,wicket,tapestry,stripes,click....随便列一些就很多了,在web应用开发和维护的时候,我们会关注哪些功能呢?

 

提到现在的web框架,我们的第一印象是什么?POJO controller?支持spring,支持guice,支持EJB3?至于View呢,我们支持jsp、freemarker、 velocity、JSF、xxx template,view层,也就tapestry有点性格,考虑了一些问题(后来wicket可以认为是"借鉴"他的理念)

 

 

大部分的框架,支持模板系统,就宣称我们的业务逻辑和展示是分离的,但是实际操作起来,这个程度上的分离还远远不够,要做好也很困难,但是现在,我需要一个View层的解决方案。

 

一些经常碰到的问题:

*运营人员说:要修改一个链接和一段文本,因为在一个动态页面里面,需要开发人员来动手,于是在某个应用上(或几个)做分支,修改,测试,预发布,发布

   靠,我就改这么点东西,告诉我需要1个工作日,还得申请紧急发布(得老大批准)

*开发人员说:UED的同学怎么又把模板里的一个变量给搞掉了,内容又不正确了(甚至是页面500了)

*法务说:有个推广链接要拿掉,全给我找出来干掉!不然老板要被请去喝咖啡了。

 

要解决这些问题,我期望的View层能够:

*很好的分离逻辑与显示,不是宣称,而是真正解决问题,不过还没想好是什么样子

*动态内容和静态内容很好的分离,静态的资源有很好的抽象和管理

*简单直白的开发维护方式

 

分享到:
评论
52 楼 mozhenghua 2012-06-19  
兄弟有没有啥解决方案呀?
51 楼 youngJiang 2009-09-25  
我个人也是比较喜欢wicket的,逻辑层和view层分开的还是比较彻底的
50 楼 myseo 2009-09-24  
iaimstar 写道
myseo 写道
iaimstar 写道
我还是比较喜欢servlet直接print代码

每次都得重新编译,很爽?

请把帖子看完,谢谢

哦不好意思,我是说的跟贴子没关系,
我回避吧。谢谢
49 楼 zozoh 2009-09-24  
iaimstar 写道
ediwer 写道
个人觉得一个好的项目,在数据库设计上得下狠功夫。

哥你穿越了

哥穿的不是越,哥穿的是寂寞
48 楼 iaimstar 2009-09-24  
ediwer 写道
个人觉得一个好的项目,在数据库设计上得下狠功夫。

哥你穿越了
47 楼 kobevaliant 2009-09-24  
各位如果想解决view的问题并且有兴趣的话,看一看我的框架吧~
http://note.iteye.com/blog/408958
拥有市面上对html最为友好的模板引擎
46 楼 fory 2009-09-24  
怎又各数据库扯上了
45 楼 ediwer 2009-09-24  
个人觉得一个好的项目,在数据库设计上得下狠功夫。
44 楼 quaff 2009-09-23  
night_stalker 写道
我也不喜欢标签呀,我喜欢 haml

看了一下haml,更像model而不是view
43 楼 night_stalker 2009-09-23  
我也不喜欢标签呀,我喜欢 haml
42 楼 argan 2009-09-23  
san_yun 写道
不晓得为什么大家好像都比较推崇模板,但我一直不喜欢模板鸡肋的开发工具。
而且模板本身也没有本质的好处,无非JSP里面用<%...%>,模板用$,#if,本质是一样的。

我提倡采用一种设计良好的UI标签,比如我们的死对头微软主推的WPF XAML通过定义一种XML隐藏了一些细节的style。

<Grid value="orders">
<GridColum name="id" label="序号" />
<GridColum name="orderName" label="订单名称" />
</Grid> 


这段代码很简易,一眼就看得出是一个table。
它是一个简单的table,还是带有可以排序,可以动态编辑的的富table呢?
编写view的“客户程序员”并不关心,他只要放心的使用这个table就可以。
另外自定义TAG因为有助手提示编写起来也很简单。

自定义TAG的实际渲染交给我们的“服务程序员”来统一处理。
这样经过良好设计的UI如果要维护table上的样式,或者修改一个链接什么的,简直易如反掌。

view很复杂,模板不适用。至于某些大牛说我就喜欢用HTML,你把我怎么样?
我只好说:我只是小屁民,没法装逼.



非常同意这句话“view很复杂”,但是从开发这边来看,总是想把他拿在自己手里,或者说是想放出去,但是做不到
41 楼 argan 2009-09-23  
SteveGY 写道
>> 你永远不知道哪些东西需要预先用include的方式处理
??? 所有的都“预先知道”是不可能的,但是当同样的内容被复制、粘帖了2次以上还不知道的话,就没什么好说的了


如果是我一个人来开发维护一个系统,当然没问题,每个地方我都很清楚,我也可以时不时的去重构一下,但是,当你有若干个应用,每个应用还有至少几十个人去维护,并且每周都会发布几次的时候,这个问题就很难控制了

我这里碰到的不是一个小的应用的问题,而是一个庞大的系统的问题,所以会看起来简单,实际上很麻烦
40 楼 san_yun 2009-09-23  
不晓得为什么大家好像都比较推崇模板,但我一直不喜欢模板鸡肋的开发工具。
而且模板本身也没有本质的好处,无非JSP里面用<%...%>,模板用$,#if,本质是一样的。

我提倡采用一种设计良好的UI标签,比如我们的死对头微软主推的WPF XAML通过定义一种XML隐藏了一些细节的style。

<Grid value="orders">
<GridColum name="id" label="序号" />
<GridColum name="orderName" label="订单名称" />
</Grid> 


这段代码很简易,一眼就看得出是一个table。
它是一个简单的table,还是带有可以排序,可以动态编辑的的富table呢?
编写view的“客户程序员”并不关心,他只要放心的使用这个table就可以。
另外自定义TAG因为有助手提示编写起来也很简单。

自定义TAG的实际渲染交给我们的“服务程序员”来统一处理。
这样经过良好设计的UI如果要维护table上的样式,或者修改一个链接什么的,简直易如反掌。

view很复杂,模板不适用。至于某些大牛说我就喜欢用HTML,你把我怎么样?
我只好说:我只是小屁民,没法装逼.
39 楼 SteveGY 2009-09-23  
>> 你永远不知道哪些东西需要预先用include的方式处理
??? 所有的都“预先知道”是不可能的,但是当同样的内容被复制、粘帖了2次以上还不知道的话,就没什么好说的了
38 楼 iaimstar 2009-09-22  
<div class="quote_title">argan 写道</div>
<div class="quote_div">
<div class="quote_title"><span style="font-weight: normal;"><strong><span>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;">要解决这些问题,我期望的View层能够:</p>
<p style="padding: 0px; margin: 0px;">*很好的分离逻辑与显示,不是宣称,而是真正解决问题,不过还没想好是什么样子</p>
<p style="padding: 0px; margin: 0px;"> </p>
</span></strong></span></div>
</div>
<p>我也一直想知道真正解决问题的方案是什么</p>
<p>jsp吧,标签很方便,但是有种说不出的别扭</p>
<p>不用标签吧,代码可能看了会吐。</p>
<p> </p>
<p>或许能指望html提供一种基于新的html标准标签的解决方案,提供一种标准数据格式规范和处理方案,比如xml或者json</p>
<p> </p>
<p>亦或者我们放弃浏览器,甚至更新成浏览器 2.0,支持新的标准和开发方式</p>
<p> </p>
<p>算了,直接页面里嵌个flash。。比啥都强</p>
37 楼 argan 2009-09-22  
<div class="quote_title"><span style="font-weight: normal;"><strong><span style="">
<p style="padding: 0px; margin: 0px;">*运营人员说:要修改一个链接和一段文本,因为在一个动态页面里面,需要开发人员来动手,于是在某个应用上(或几个)做分支,修改,测试,预发布,发布</p>
<p style="padding: 0px; margin: 0px;">   靠,我就改这么点东西,告诉我需要1个工作日,还得申请紧急发布(得老大批准)</p>
<p style="padding: 0px; margin: 0px;">&gt;&gt;如果“动态”页面涉及复杂的业务逻辑、数据库操作,而这些后台的复杂操作只输出一个很简单的结果,你(或老板)只看到这是一个很简单的东西(结果),当然就对需要1工作日的工作量不能理解了。</p>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;"><span style="color: #0000ff;">&gt;&gt; 我是站在开发这个角度来看的,这里只是说明由开发人员去维护这些页面的</span><span style="color: #ff0000;">别扭</span><span style="color: #0000ff;">,虽然这里描述的流程是复杂了点(真实的流程),是可以删减,但是问题重点不在流程,也不在具体开发什么内容</span></p>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;">*开发人员说:UED的同学怎么又把模板里的一个变量给搞掉了,内容又不正确了(甚至是页面500了)</p>
<p style="padding: 0px; margin: 0px;">&gt;&gt;呵呵,这个。。。废话嘛,没了一个变量,除非它本来就未被程序使用,否则要是程序依然可以正常工作,那叫灵异事件。</p>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;"><span style="color: #0000ff;">&gt;&gt; 同样的,这里要说明的也只是UED的同学去动这些有程序逻辑/变量的模板的苦难所在</span></p>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;">*法务说:有个推广链接要拿掉,全给我找出来干掉!不然老板要被请去喝咖啡了。</p>
<p style="padding: 0px; margin: 0px;">&gt;&gt;嗯,这个嘛,仔细的设计你的模板,恰当的使用include技巧,可以不用修改全部页面,只要修改被include的块就解决了,但总有人轻视include原则的。</p>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;"><span style="color: #0000ff;">&gt;&gt; 你永远不知道哪些东西需要预先用include的方式处理,事先能想到的头啊尾啊,常见的公用地方都已经类似处理过了,这里只是说明现在的方式处理一些突发的事件很繁琐,不过这个提法本身可能就有些问题,又想不事先知道,又想随时想改就改,呵呵,我太贪婪了</span></p>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;">要解决这些问题,我期望的View层能够:</p>
<p style="padding: 0px; margin: 0px;">*很好的分离逻辑与显示,不是宣称,而是真正解决问题,不过还没想好是什么样子</p>
<p style="padding: 0px; margin: 0px;">&gt;&gt;不知道你在说什么,这个是View层提供的功能?还是设计、编码人员大脑中应该时刻遵循的原则?我想至少jsp和jstl早就提供了工具分离逻辑和显示了,但如果你们一定要在jsp中写scriptlet,也没有人拦得住你的。所以,还是大脑中的规则比较重要吧。</p>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;"><span style="color: #0000ff;">&gt;&gt;看来没看明白我前面描述的问题,我没觉得jsp/jstl分离的有多好</span></p>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;">*动态内容和静态内容很好的分离,静态的资源有很好的抽象和管理</p>
<p style="padding: 0px; margin: 0px;">&gt;&gt;没有看懂,你对“很好的抽象和管理”的定义是什么?</p>
<p style="padding: 0px; margin: 0px;"> </p>
<p style="padding: 0px; margin: 0px;"><span style="color: #0000ff;">&gt;&gt; 结合前面的运营人员和法务的案例去推测吧,挺难描述的</span></p>
<p style="padding: 0px; margin: 0px;"> </p>
</span></strong></span></div>
36 楼 argan 2009-09-22  
jansel 写道
UI层本身变化很大,所以UI要形成一个通用的很难。通过看各个框架提供的Tag就知道了,只能处理数据,布局是很难搞的。

所以只要有Tag,那么肯定会和HTML Tag混合起来用,这样维护就成问题了。

个人还是喜欢Wicket的简介的方式,UI就交给HTML了。



wicket和tapestry处理方式非常类似,也是我看到的相当优雅的一种方式了,这基本能解决模板的问题了

不过我考虑的还有其他静态资源的管理问题,比如js,css,图片资源,这些都需要在我们的模板里面去引用,如果要修改一个js/css/image,我必须检查所有可能引用的地方,否则也不敢乱动

据ebay的一些文档描述的样子看来,他的V4已经能很好的管理这些资源了,不过看起来很复杂,可以参考 http://www.ibm.com/developerworks/cn/opensource/os-eclipse-ebay1/ 还有 http://yiminghe.iteye.com/blog/427337

且不说他的解决方案如何,至少要解决的问题是类似的,这个问题困扰了我很久,一直没有很好的方案

我期望的最终目标是将展示*完全*交给UED部门和运营部门,开发不用关心,开发和UED之间只有一种约定,或者定义一种自己特有的DSL,供UED来使用,这个DSL不是模板,是业务的一些标签,或者标记

供yy,也表达一下我本来的意思
35 楼 SteveGY 2009-09-22  
<div class="quote_title">argan 写道</div>
<div class="quote_div">
<p>现在市面上这么多的java web 开发框架,struts2,spring mvc,wicket,tapestry,stripes,click....随便列一些就很多了,在web应用开发和维护的时候,我们会关注哪些功能呢?</p>
<p> </p>
<p>提到现在的web框架,我们的第一印象是什么?POJO controller?支持spring,支持guice,支持EJB3?至于View呢,我们支持jsp、freemarker、 velocity、JSF、xxx template,view层,也就tapestry有点性格,考虑了一些问题(后来wicket可以认为是"借鉴"他的理念)</p>
<p> </p>
<p> </p>
<p>大部分的框架,支持模板系统,就宣称我们的业务逻辑和展示是分离的,但是实际操作起来,这个程度上的分离还远远不够,要做好也很困难,但是现在,我需要一个View层的解决方案。</p>
<p> </p>
<p>一些经常碰到的问题:</p>
<p>*运营人员说:要修改一个链接和一段文本,因为在一个动态页面里面,需要开发人员来动手,于是在某个应用上(或几个)做分支,修改,测试,预发布,发布</p>
<p>   靠,<span style="color: #ff00ff;">我就改这么点东西</span>,告诉我需要1个工作日,还得申请紧急发布(得老大批准)</p>
<p><span style="color: #ff0000;">&gt;&gt;如果“动态”页面涉及复杂的业务逻辑、数据库操作,而这些后台的复杂操作只输出一个很简单的结果,你(或老板)只看到这是一个很简单的东西(结果),当然就对需要1工作日的工作量不能理解了</span><span style="color: #ff0000;">。</span></p>
<p>*开发人员说:UED的同学怎么又把模板里的一个<span style="color: #ff00ff;">变量给搞掉了</span>,内容又不正确了(甚至是页面500了)</p>
<p><span style="color: #ff0000;">&gt;&gt;呵呵,这个。。。废话嘛,没了一个变量,除非它本来就未被程序使用,否则要是程序依然可以正常工作,那叫灵异事件。</span></p>
<p>*法务说:有个推广链接要拿掉,全给我找出来干掉!不然老板要被请去喝咖啡了。</p>
<p><span style="color: #ff0000;">&gt;&gt;嗯,这个嘛,仔细的设计你的模板,恰当的使用include技巧,可以不用修改全部页面,只要修改被include的块就解决了,但总有人轻视include原则的。</span></p>
<p> </p>
<p>要解决这些问题,我期望的View层能够:</p>
<p>*很好的分离逻辑与显示,不是宣称,而是真正解决问题,不过还没想好是什么样子</p>
<p><span style="color: #ff0000;">&gt;&gt;不知道你在说什么,这个是View层提供的功能?还是设计、编码人员大脑中应该时刻遵循的原则?我想至少jsp和jstl早就提供了工具分离逻辑和显示了,但如果你们一定要在jsp中写scriptlet,也没有人拦得住你的。所以,还是大脑中的规则比较重要吧。</span></p>
<p>*动态内容和静态内容很好的分离,静态的资源有很好的抽象和管理</p>
<p><span style="color: #ff0000;">&gt;&gt;没有看懂,你对“很好的抽象和管理”的定义是什么?</span></p>
<p>*简单直白的开发维护方式</p>
<p><span style="color: #ff0000;">&gt;&gt;呵呵,我曾经有一个同事,那时是在2000年,他是我们销售总监的同学。他来到我们公司,一开始的愿望是做一个程序员,他说:“你看,我这样……再这样……,拖拉几个输入框、下拉列表框,图形背景……,你看,这个‘程序’就可以运行了,很简单的,而且很漂亮。做程序员真是太酷了……”。当然,2周以后,他还是去做销售了……</span></p>
<p> </p>
</div>
<p>好吧,关于最后的那个同事的故事,大家不要对号入座,开个玩笑的<img src="/images/smiles/icon_biggrin.gif" alt=""></p>
34 楼 timothy_bitty 2009-09-22  
能简洁当然好,尽量使页面简单化,但不要太简单!View层现在的解决方案很多,动态和静态部分的耦合度大小可以取决于项目需求 .
33 楼 iaimstar 2009-09-22  
zozoh 写道
iaimstar 写道

要解决这些问题,我期望的View层能够:
*很好的分离逻辑与显示,不是宣称,而是真正解决问题,不过还没想好是什么样子
*动态内容和静态内容很好的分离,静态的资源有很好的抽象和管理
*简单直白的开发维护方式

上面这个这不是我写的。。。
iaimstar 写道

前面说了,东西巨简单,简单到没必要有UI存在的地步,何况
我就是我们公司的美工~~,精通phtoshop丫


页面上的东西有两种:
  1. 样子
  2. 逻辑

样子用 HTML/CSS 写, 逻辑用 JS 写。
构建任何界面元素都可这样来划分。
程序员一直在尽量避免把业务逻辑写到页面上,即使是js里面,客户操作流程无所谓
数据来源也有两种:
  1. 服务器直接渲染出的 HTML
  2. JS 二次读取的 json/xml/dom 等

根据不同的需求,可以决定某一个界面的数据如何产生,一般的网站主要采用1,结合2。便于SEO。
B/S软件适合 2, 可以让开发更加简化。

在这两个思路基础上,在不同的项目中总结一套自己的 UI 解决方案并不是太难的事情。

我自己也有UI解决方案,用servlet也是有理由的,就像前面说的项目页面非常简单,jsp+include servlet足够了,我没有必要为了一个1个星期需求简单的小玩意整合一个所谓UI组件进去,徒增复杂度,这种情况,程序员看代码更容易清晰

相关推荐

    Spring MVC 员工管理系统

    大部分Java应用都是Web应用,展现层是Web应用不可忽略的重要环节。Spring为展现层提供了一个优秀的Web框架——Spring MVC。和众多其它Web框架一样,它基于MVC设计理念,此外,由于它采用了松散耦合可插拔组件结构,...

    图书管理系统资源下载,flask 框架,mysql数据库

    较为完善的图书管理系统,MVC模式,已完成的功能里已经涵盖通过 web 前端视图层(view)的操作与 python 后端的控制层(controler)与模型层(model)的交互,已经实现对 mysql 数据库中数据的增删改查。已完成的功能所需...

    是男人就下100层游戏

    游戏主界面采用了MVC的模式来设计,CCScene 作为 Controller ,其它的Layer 作为View。其它页面都比较简单,单Layer 实现。逻辑也都放在Layer里了。另外,专门定义了一个 HideLayer ,目的是实现弹出对话框的效果,...

    java面试题

    Struts2只是起到一个数据接收和转接的功能,就是Controller控制器,而传来数据的页面叫view显示层,Struts2将数据提交给进行处理的类叫Model模型层,专门进行数据处理和数据库的连接。 heap和stack有什么区别? 答:...

    java 面试题 总结

    抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。...

    SenchaCmd-3.1.0.192-windows.exe

    现在又多种多样的配置选项可以使用在 ”.sencha/app/sencha.cfg“文件夹下,在只有一张页面的情况下,可以忽略”.sencha/workspace“配置文件夹 classpath类路径 ---------------------------------- sencha app ...

    Django快速入门教程

    Django 此文档基于Django3.0 简介 ...很像MVC。 下面快速上手一个Django项目 python的安装和django库的安装忽略 创建项目 使用命令,进入想要放置项目的地方,输入以下命令创建名为demo项目 django-a

    超级有影响力霸气的Java面试题大全文档

    1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是...

    asp.net知识库

    忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,...

    springmybatis

    mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in ...

    JAVA面试题最全集

    将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    如果你的电脑满足要求但仍然显示检查失败,这时候直接忽略,勾选全部忽略 7. 步骤6/8:概要信息 核对将要安装数据的详细信息,并保存响应文件,以备以后查看。然后点击完成数据库安装 8. 步骤7/8:安装产品 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...

Global site tag (gtag.js) - Google Analytics