`
argan
  • 浏览: 129606 次
  • 性别: 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层能够:

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

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

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

 

分享到:
评论
32 楼 zozoh 2009-09-22  
iaimstar 写道

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

iaimstar 写道

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


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

样子用 HTML/CSS 写, 逻辑用 JS 写。
构建任何界面元素都可这样来划分。

数据来源也有两种:
  1. 服务器直接渲染出的 HTML
  2. JS 二次读取的 json/xml/dom 等

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

在这两个思路基础上,在不同的项目中总结一套自己的 UI 解决方案并不是太难的事情。
31 楼 iaimstar 2009-09-22  
yirentianran 写道
wanglei8 写道
logicgate 写道
iaimstar 写道
logicgate 写道
iaimstar 写道
我还是比较喜欢servlet直接print代码

遇上复杂的ui,这么print岂不是耦合度太高?我觉得对于view层,越是复杂,就越应该把structure, presentation, behavior三者分离。

复杂的东西都是客户“毛病多”最后搞出来的

我们做的东西页面巨简单,连复杂的js都没有 木哈哈哈,jsp+include servlet最合适

同意,我们的客户就是毛病巨多,挑三拣四,老板也强调要user experience,结果愣是从瘦客户端慢慢整成了富客户端。

对于简单的页面,简单是最好的设计。

支持简洁之上

简洁是好,但是也要有一个度,如果真的servlet中直接print代码,
那UI来修改页面时候岂不是要看懂java代码。
如果UI不懂,那不利于协同工作。除非从前台到后台都是由你一个人来完成。
日后维护也是一个问题。

前面说了,东西巨简单,简单到没必要有UI存在的地步,何况
我就是我们公司的美工~~,精通phtoshop丫
30 楼 yirentianran 2009-09-22  
wanglei8 写道
logicgate 写道
iaimstar 写道
logicgate 写道
iaimstar 写道
我还是比较喜欢servlet直接print代码

遇上复杂的ui,这么print岂不是耦合度太高?我觉得对于view层,越是复杂,就越应该把structure, presentation, behavior三者分离。

复杂的东西都是客户“毛病多”最后搞出来的

我们做的东西页面巨简单,连复杂的js都没有 木哈哈哈,jsp+include servlet最合适

同意,我们的客户就是毛病巨多,挑三拣四,老板也强调要user experience,结果愣是从瘦客户端慢慢整成了富客户端。

对于简单的页面,简单是最好的设计。

支持简洁之上

简洁是好,但是也要有一个度,如果真的servlet中直接print代码,
那UI来修改页面时候岂不是要看懂java代码。
如果UI不懂,那不利于协同工作。除非从前台到后台都是由你一个人来完成。
日后维护也是一个问题。
29 楼 yinbaicheng 2009-09-22  
支持 简洁至上
28 楼 iaimstar 2009-09-22  
myseo 写道
iaimstar 写道
我还是比较喜欢servlet直接print代码

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

请把帖子看完,谢谢
27 楼 jansel 2009-09-22  
UI层本身变化很大,所以UI要形成一个通用的很难。通过看各个框架提供的Tag就知道了,只能处理数据,布局是很难搞的。

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

个人还是喜欢Wicket的简介的方式,UI就交给HTML了。
26 楼 myseo 2009-09-22  
iaimstar 写道
我还是比较喜欢servlet直接print代码

每次都得重新编译,很爽?
25 楼 macllical 2009-09-22  
可以试下apache-wicket框架。显示和业务逻辑分离的相对而言最彻底。
24 楼 抛出异常的爱 2009-09-22  
solonote 写道
抛出异常的爱 写道
wiki丰富化

就是页面的所有元素
都是用wiki可调的.

这样子业务人员才能真正的自己完成业务逻辑

PS:如果自己写html生成模板...我就用决对定位来布局元素.


Wiki丰富化是指?异常哥可否说的详尽一些,或给点例子


wiki可以由文编发布
这样的话....很多程序员+美工所作的事就可以省下了.

还有就是多个模块排布时用决对定位的方式来排版....
那样子的页面生成器好写也可以防止跨ie ff等
23 楼 night_stalker 2009-09-22  
另外想要彻底消灭 scriptlet 是非理性的 …… 页面放大量逻辑固然很混乱,但是少量插入能省很多事。

例如 <%= f(1,2,3) %> 写成标签,就是 <f a="1" b="2" c="3"/>
本质上是同一个东西,jstl 最后也会被编译成 servlet print,连这种都改成标签有什么好处?

强制页面为 xml 就更没必要了,把 </html> 去掉至少能让想从你网站偷内容的人郁闷一下子。google 还故意让标签不关门节约带宽,每年省 3000 多美元呢。
22 楼 night_stalker 2009-09-22  
XSL 就是函数式语言了,复杂的原因是强迫写闭合标签和参数名,如果有 lisp 那样简洁就没问题了。

scala lift 就是函数式的框架,做的 view 和逻辑分离已经相当完美了。(虽然我觉得有点过于洁癖)

譬如说数据绑定的简单逻辑:
class A {
  // 自动产生可用的 <lift:A.f> 标签,参数 x 为标签的内部
  def f(x: NodeSeq) = {
    var a = "" // 闭包变量,对应表单域的值

    // 内部函数
    def process() {
      SomeModel find By(SomeModel.title, a) // 引用闭包变量做处理
      // ...
    }

    // 绑定命名空间 entry
    bind("entry", x,
      // a = _ 是一个函数,表单域改变时设置 a 的值,也能很方便改写成 ajax 的
      "a" -> SHtml.text(a, a = _),  
      // 提交时调用内部函数 process()
      "submit" -> SHtml.submit("提交", process _))
  }
}


在 view 中使用
<lift:A.f form="POST">
  <h3>填写 a 的值</h3>
  <p><entry:a/></p>
  <p><entry:submit/></p>
</lift:A.f>
21 楼 zhouxwyeah 2009-09-21  
也许XSL算是分离,VIEW都是用XML来填充展示,但是我也很烦XSL,感觉JSP最快捷,如果追求其他的什么东西,当然也要放弃其他一些东西。

  MVC+XSL或者其他模板,其实也就是把response得方式换了一下
20 楼 key232323 2009-09-21  
我觉得
data binding + template + ui widget
应该是个不错的选择

最近没时间,不过打算作一个

**mvc + web flow + groovy/freemarker + zk/extjs/jquery-ui + jquery-ui-css/yaml

的ui端的聚合性高的东东的

当然,上面列的太理想化了,就最简单的,我能作好就满足了
19 楼 logicgate 2009-09-21  
对于很多系统,view层是最容易被忽视被认为简单,但实际上非常具有挑战性,也非常容易导致混乱的一层。

几年前看ajax in action的时候,里面提到一种nested mvc,我觉得对于业务系统的复杂ui来说是一个不错的实践。
18 楼 lkjust08 2009-09-21  
很好的分离逻辑与显示,不是宣称,而是真正解决问题,不过还没想好是什么样子

没有想好,就表明view的确不好分
17 楼 solonote 2009-09-21  
抛出异常的爱 写道
wiki丰富化

就是页面的所有元素
都是用wiki可调的.

这样子业务人员才能真正的自己完成业务逻辑

PS:如果自己写html生成模板...我就用决对定位来布局元素.


Wiki丰富化是指?异常哥可否说的详尽一些,或给点例子
16 楼 logicgate 2009-09-21  
wanglei8 写道
logicgate 写道

对于简单的页面,简单是最好的设计。

支持简洁之上

盲目推崇简单至上是不实际的。简洁至上的前提是你的设计必须能满足系统绝大部分的需求(包括客户的需求)。我觉得我很多时候都是在确保系统不过分复杂以至于降低开发效率和满足用户体验两者之间挣扎。
15 楼 liu78778 2009-09-21  
世间万物,
越靠近人, 就越复杂越难把握;
越远离人, 就越简洁越易掌控.
14 楼 wanglei8 2009-09-21  
logicgate 写道
iaimstar 写道
logicgate 写道
iaimstar 写道
我还是比较喜欢servlet直接print代码

遇上复杂的ui,这么print岂不是耦合度太高?我觉得对于view层,越是复杂,就越应该把structure, presentation, behavior三者分离。

复杂的东西都是客户“毛病多”最后搞出来的

我们做的东西页面巨简单,连复杂的js都没有 木哈哈哈,jsp+include servlet最合适

同意,我们的客户就是毛病巨多,挑三拣四,老板也强调要user experience,结果愣是从瘦客户端慢慢整成了富客户端。

对于简单的页面,简单是最好的设计。

支持简洁之上
13 楼 logicgate 2009-09-21  
iaimstar 写道
logicgate 写道
iaimstar 写道
我还是比较喜欢servlet直接print代码

遇上复杂的ui,这么print岂不是耦合度太高?我觉得对于view层,越是复杂,就越应该把structure, presentation, behavior三者分离。

复杂的东西都是客户“毛病多”最后搞出来的

我们做的东西页面巨简单,连复杂的js都没有 木哈哈哈,jsp+include servlet最合适

同意,我们的客户就是毛病巨多,挑三拣四,老板也强调要user experience,结果愣是从瘦客户端慢慢整成了富客户端。

对于简单的页面,简单是最好的设计。

相关推荐

    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