`
argan
  • 浏览: 129542 次
  • 性别: 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组件进去,徒增复杂度,这种情况,程序员看代码更容易清晰

相关推荐

    MVC学习视频

    **MVC(Model-View-Controller)模式是软件开发中的一种设计模式,尤其在Web应用开发领域广泛应用。C# MVC是Microsoft为.NET Framework提供的一种基于MVC架构的Web应用程序开发框架。这个“MVC学习视频”教程涵盖了...

    Mvc传递Json数据

    在ASP.NET MVC中,Json数据的传输主要涉及到两个关键点:控制器(Controller)和视图(View),以及Ajax请求。 1. 控制器返回Json结果 在控制器方法中,我们可以使用`JsonResult`类来返回Json数据。例如: ```...

    剖析ASP.NET MVC的DependencyResolver组件

    在深入探究*** MVC框架的组件时,我们常常会忽略一些底层的细节。但当我们要构建出高效、可维护的应用时,理解这些基础构件就显得至关重要。今天我们将一起深入了解和剖析*** MVC的DependencyResolver组件,这是一个...

    Newtonsoft.Json C# MVC中json对象json字符串处理2.0版3.5版4.0版4.5版(历史版本全)

    在.NET框架中,尤其是在MVC(Model-View-Controller)架构中,它是一个不可或缺的工具,用于序列化和反序列化JSON对象,将C#对象转换为JSON字符串,以及将JSON字符串解析回C#对象。 在C# MVC项目中,JSON处理通常...

    easyui mvc

    1. **.gitignore**:这是一个版本控制配置文件,指示 Git 忽略哪些文件或目录,防止不必要的文件被添加到版本库中,如编译产生的临时文件、日志文件等。 2. **jeasyuimvc.sln**:这是一个 Visual Studio 解决方案...

    MVC路由机制

    MVC(Model-View-Controller)是一种流行的软件架构模式,常被应用于Web应用开发中。MVC模式将应用分为三个核心部分:模型(Model)、视图(View)与控制器(Controller)。本文旨在深入探讨MVC中的路由机制及其工作...

    ASP.NETMVC5蒋金楠

    ASP.NET MVC5是微软开发的一款用于构建Web应用程序的框架,它是ASP.NET平台的一部分,结合了MVC(Model-View-Controller)设计模式和ASP.NET Web Forms的诸多优点。在这个框架中,蒋金楠是一位知名的讲师,他通过...

    MVC四种表单提交

    在这个例子中,表单数据将被发送到`/Star/Apply`路径对应的控制器和Action方法进行处理。 #### 三、jQuery + Ajax 提交表单 使用jQuery库结合Ajax技术可以实现异步表单提交,这种方式不会刷新整个页面,而是局部...

    spring mvc(整合了json)

    3. **模型对象到 JSON 的转换**:Jackson 提供了 `@JsonProperty` 和 `@JsonIgnore` 等注解,用于控制哪些字段应该被序列化为 JSON,哪些应该被忽略。在 Model 类中,我们可以使用这些注解来定制序列化和反序列化的...

    ASP.NET MVC中的扩展点

    MVC(Model-View-Controller)是一种软件架构模式,它将应用程序逻辑分为三个核心组成部分:模型(Model)、视图(View)和控制器(Controller)。这种分离有助于简化开发过程并提高代码的可维护性和可扩展性。ASP...

    微软推荐的基于.NET-MVC书籍,英文版的

    总的来说,这本.NET-MVC英文版书籍是.NET开发者的一份宝贵资源,尽管内容繁多且深入,但对提升.NET MVC技能和理解Web开发的最佳实践有着不可忽视的价值。虽然书的厚度可能会带来一定的阅读挑战,但对于决心投身于...

    基于MVC设计模式shop完整项目代码

    MVC(Model-View-Controller)设计模式是一种广泛应用于Web应用开发中的架构模式,它将应用程序的业务逻辑、用户界面和数据访问分离开来,使得各部分可以独立工作,提高代码的可维护性和可扩展性。在这个名为"基于...

    学生选课系统实训项目基于MVC模式

    在这个学生选课系统中,Model部分可能包含如“学生”、“课程”等实体类,以及与数据库交互的DAO(Data Access Object)层,用于执行SQL语句,进行数据的增删改查。这些操作可能通过JDBC(Java Database ...

    ASP.NET MVC5 新特性

    例如,在下面的示例中,`isbn`参数被标记为可选: ```csharp [Route("books/{isbn?}")] public ActionResult View(string isbn) { if (!String.IsNullOrEmpty(isbn)) { return View("OneBook", GetBook(isbn)); ...

    ASP.NET MVC框架开发系列课程(4):可替换的视图(View)

    在这个系列课程的第四部分,我们将深入探讨可替换的视图(View)机制,这是MVC框架中的一个重要组成部分。 视图在MVC架构中扮演着呈现数据的角色,它是用户与应用交互的界面。可替换的视图允许开发者根据不同的场景...

    Pro Spring MVC with Web Flow

    在Web应用程序开发中,视图解析是重要一环,而安全性也是不能忽视的部分: - **视图解析**:理解如何在Spring MVC中解析和实现视图,包括JSP、FreeMarker等模板技术的使用。 - **Spring Security**:本书还将介绍...

    ASP.NET MVC 4高级编程

    1. **控制器(Controllers)**:在*** MVC中,控制器负责处理用户输入,并调用模型(Model)层的代码来访问数据,然后将数据传递给视图(View),以生成响应。在高级编程中,将讨论如何创建高级路由、构建动态操作、...

    Spring_MVC详解学习

    Spring MVC是Spring框架中的一个核心模块,它遵循了MVC(Model-View-Controller,模型-视图-控制器)设计模式。Spring MVC允许开发者构建灵活且可维护的Web应用程序。配置Spring MVC框架是确保Web应用程序能够高效...

Global site tag (gtag.js) - Google Analytics