让代码与视图模板的分离

news/2024/7/7 19:17:28

需要什么样的mvc

  在基于B/S的应用程序开发中,从基本的技术分工上来说就是两大块,一是软件显示界面,另一个是程序逻辑。在N年前的脚本语言时代,无论是asp、php还是jsp,我们基本是都是把这两者柔和在一起的。尽管我们想方设法做好很多函数或者包含文件来努力达到软件的复用,但仍然无法满足多变的用户需求,这主要是因为以前的纯脚本编码方式无法很好支持及应用面向对象(OO)领域中的强大功能。

  在常见的B/S软件项目中,界面的设计包括html界面、Wap界面及其它由文本字符协议为基本表示的界面等。以我们接触最多的html页面为例子,在做这些界面的时候往往需要美工先使用photoshop或fireworks等图形界面设计工具进行全局设计,然后再使用进行Dreamweaver等html页面制作工具进行加工制作。而强大的程序逻辑及后台处理都是由服务器端程序完成,这些程序具有较高的稳定性,其开发工具如JBuilder、Eclipse等对View层的界面无法很好的支持(当然那些用记事本写界面的应用除外),这就使得很多MVC框架的设计都无法两全齐美。

  随着Struts等MVC框架的陆续出现及应用,我们的视图层变得越来越简单。然而,仍然不时需要在页面中插入Java代码,比如另人讨厌的@ 。这些MVC框架大多提供了一系列的自定义标签,当自定义标签越来越复杂的时候,对于程序员简单的同时,却把咱们的美工及页面制作人员给吓坏了。


页面及程序如何分离

  EasyJWeb作为一个快速Java Web MVC框架,其设计目标不尽是要简化软件开发人员的代码书写工作,更是要能方便界面设计人员的工作。EasyJWeb通过基于模板的方式,建立在强大而简单的模板引擎Velocity基础上,并对Velocity作了一定的扩充。

  Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。作为一个比较完善的模板引擎,Velocity的功能是比较强大的,但强大的同时也增加了应用复杂性。

  理论上你可以在EasyjWeb模板使用所有Velocity的脚本及功能,但我们不推荐你在界面模板中使用过多过复杂的脚本表达方式,在万不得已的情况下,不要在界面模板中加入任何复杂的逻辑,更不要在界面模板中加入变量声明、逻辑运算符等等。

  在EasyJWeb中,我们提供了四条基本的模板脚本语句,基本上就能满足所有应用模板的要求。这四条模板语句很简单,可以直接由界面设计人员来添加。在当前很多EasyJWeb的应用实践中,我们看到,所有界面模板中归纳起来只有下面五种简单模板脚本语句即可实现:
  1、$!obj  直接返回对象结果。  
  2、#if($!obj) #else #end 判断语句
  3、#foreach( $info in $list) $info.someList #end  循环读取集合list中的对象,并作相应的处理。
  4、#macro(macroName)#end 脚本函数(宏)调用,不推荐在界面模板中大量使用。
  5、包含文件#inclue("模板文件名")或#parse("模板文件名")

  关于EasyJWeb及Velocity脚本的更多内容,请看:EasyJWeb-Velocity脚本简明教程 http://www.easyjf.com/easyjweb/EasyJWeb-Velocity.htm

  EasyJWeb另外提供了很多工具类,通过这些工具类可以大大简化模板的书写。比如CommUtil中的toRowChildList,TagUtil中的options等。
  通过使用Velocity模板脚本,可以使得视图中除了与数据显示有关的内容以外,不再有其它任何与特定语言相关的标记或符号。由于Velocity模板对界面不具备任何破坏性,因此就算添加了一系列的模板标记后,美工及页面制作人员不用作任何额外的特殊处理,就能看到纯天然的界面视图。另外还能通过半小时就能学会了解Velocity脚本的用法,根据客户的审美观、习惯乃至心情灵活的更改系统界面。

方便他人即是方便自己

  EasyJWeb之所以提倡页面模板及程序分离,一个重要原因就是解放程序员。给他人方便就等于给自己方便,EasyJWeb中包含了这样的生活哲学。因此,作为程序员,接触一段时间EasyJWeb后,你会发现除了让视图界面的人员方便的以外,EasyJWeb最主要关照的还是咱们这些审美观经常被批评,最讨厌那些乱七八糟的html代码,css样式以及患有图片恐惧症的程序员。因此,EasyJWeb让程序员非常轻松与视图层的内容打交道。比如要把一个对象发送给视图层,只需要在Action中使用form.addResult(“name”,obj)即可,要把一个对象分成各属性发送给视图层,可以直接使用form.addPo(obj)方法即可;要从视图层表单中读取数据到对象中,只需要form.toPo(obj)即可;EasyJWeb为了处理了数据转换、验证、数据保护等诸多细节。
 




需要什么样的mvc

  在基于B/S的应用程序开发中,从基本的技术分工上来说就是两大块,一是软件显示界面,另一个是程序逻辑。在N年前的脚本语言时代,无论是asp、php还是jsp,我们基本是都是把这两者柔和在一起的。尽管我们想方设法做好很多函数或者包含文件来努力达到软件的复用,但仍然无法满足多变的用户需求,这主要是因为以前的纯脚本编码方式无法很好支持及应用面向对象(OO)领域中的强大功能。

  在常见的B/S软件项目中,界面的设计包括html界面、Wap界面及其它由文本字符协议为基本表示的界面等。以我们接触最多的html页面为例子,在做这些界面的时候往往需要美工先使用photoshop或fireworks等图形界面设计工具进行全局设计,然后再使用进行Dreamweaver等html页面制作工具进行加工制作。而强大的程序逻辑及后台处理都是由服务器端程序完成,这些程序具有较高的稳定性,其开发工具如JBuilder、Eclipse等对View层的界面无法很好的支持(当然那些用记事本写界面的应用除外),这就使得很多MVC框架的设计都无法两全齐美。

  随着Struts等MVC框架的陆续出现及应用,我们的视图层变得越来越简单。然而,仍然不时需要在页面中插入Java代码,比如另人讨厌的@ 。这些MVC框架大多提供了一系列的自定义标签,当自定义标签越来越复杂的时候,对于程序员简单的同时,却把咱们的美工及页面制作人员给吓坏了。


页面及程序如何分离

  EasyJWeb作为一个快速Java Web MVC框架,其设计目标不尽是要简化软件开发人员的代码书写工作,更是要能方便界面设计人员的工作。EasyJWeb通过基于模板的方式,建立在强大而简单的模板引擎Velocity基础上,并对Velocity作了一定的扩充。

  Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。作为一个比较完善的模板引擎,Velocity的功能是比较强大的,但强大的同时也增加了应用复杂性。

  理论上你可以在EasyjWeb模板使用所有Velocity的脚本及功能,但我们不推荐你在界面模板中使用过多过复杂的脚本表达方式,在万不得已的情况下,不要在界面模板中加入任何复杂的逻辑,更不要在界面模板中加入变量声明、逻辑运算符等等。

  在EasyJWeb中,我们提供了四条基本的模板脚本语句,基本上就能满足所有应用模板的要求。这四条模板语句很简单,可以直接由界面设计人员来添加。在当前很多EasyJWeb的应用实践中,我们看到,所有界面模板中归纳起来只有下面五种简单模板脚本语句即可实现:
  1、$!obj  直接返回对象结果。  
  2、#if($!obj) #else #end 判断语句
  3、#foreach( $info in $list) $info.someList #end  循环读取集合list中的对象,并作相应的处理。
  4、#macro(macroName)#end 脚本函数(宏)调用,不推荐在界面模板中大量使用。
  5、包含文件#inclue("模板文件名")或#parse("模板文件名")

  关于EasyJWeb及Velocity脚本的更多内容,请看:EasyJWeb-Velocity脚本简明教程 http://www.easyjf.com/easyjweb/EasyJWeb-Velocity.htm

  EasyJWeb另外提供了很多工具类,通过这些工具类可以大大简化模板的书写。比如CommUtil中的toRowChildList,TagUtil中的options等。
  通过使用Velocity模板脚本,可以使得视图中除了与数据显示有关的内容以外,不再有其它任何与特定语言相关的标记或符号。由于Velocity模板对界面不具备任何破坏性,因此就算添加了一系列的模板标记后,美工及页面制作人员不用作任何额外的特殊处理,就能看到纯天然的界面视图。另外还能通过半小时就能学会了解Velocity脚本的用法,根据客户的审美观、习惯乃至心情灵活的更改系统界面。

方便他人即是方便自己

  EasyJWeb之所以提倡页面模板及程序分离,一个重要原因就是解放程序员。给他人方便就等于给自己方便,EasyJWeb中包含了这样的生活哲学。因此,作为程序员,接触一段时间EasyJWeb后,你会发现除了让视图界面的人员方便的以外,EasyJWeb最主要关照的还是咱们这些审美观经常被批评,最讨厌那些乱七八糟的html代码,css样式以及患有图片恐惧症的程序员。因此,EasyJWeb让程序员非常轻松与视图层的内容打交道。比如要把一个对象发送给视图层,只需要在Action中使用form.addResult(“name”,obj)即可,要把一个对象分成各属性发送给视图层,可以直接使用form.addPo(obj)方法即可;要从视图层表单中读取数据到对象中,只需要form.toPo(obj)即可;EasyJWeb为了处理了数据转换、验证、数据保护等诸多细节。
 





http://www.niftyadmin.cn/n/3648082.html

相关文章

灵活的视图切换及导向

在基于请求转发型的MVC框架中,给用户提供一个简单、灵活的视图切换及页面导向功能是非常关键的。作为EasyJWeb特性介绍系统的一篇文章,本篇主要介绍EasyJWeb中的页面切换及导向机制。EasyJWeb引入了纯模板的机制,通过其提供结构清晰的Module、…

【linux】

1、Linux系统介绍 不同于Windows,Linux是一个开源的操作系统。 Linux一切皆文件,对文件的操作有:创建文件、编辑文件、保存文件、关闭文件、重命名文件、删除文件、恢复文件。 1.1 目录结构 根目录 / bin:全称binary,含义是二进…

给网页添加背景图片html_如何使用HTML将背景图像添加到网页的顶部

给网页添加背景图片htmlHow To Build a Website With HTML 如何使用HTML构建网站This tutorial series will guide you through creating and further customizing this website using HTML, the standard markup language used to display documents in a web browser. No pri…

docker本地开发和测试_如何使用Docker和DDEV在本地计算机上开发Drupal 9网站

docker本地开发和测试The author selected the Diversity in Tech Fund to receive a donation as part of the Write for DOnations program. 作者选择了“技术多元化”基金来接受捐赠,这是Write for DOnations计划的一部分。 介绍 (Introduction) DDEV is an ope…

人性化的验证(Validate)系统

为何要验证(Validate)   验证是系统中一个必不可少的部分,前端验证、后台验证中起来往往会发现,一个简单完整的CRUD应用中,用来处理与验证有关的代码或配置就占了几乎三分之一。Struts1.x时代的验证就不提了。不管是Struts2(webwork)的验证…

小程序动画从头开始_如何从头开始在Kubernetes上部署弹性Node.js应用程序

小程序动画从头开始视频 (Video) 描述 (Description) You may have heard the buzz around Kubernetes and noticed that many companies have been rapidly adopting it. Due to its many components and vast ecosystem it can be quite confusing to find where the path st…

在easyjweb应用中关于acegi安全配置的增强

在easyjweb的应用程序中,我们习惯通过easyJWebCommand这一参数来指定服务器端控制器的执行命令。比如newsDocManage.ejf?easyJWebCommandedit&id1,将执行NewsDocManageAction中的doEdit方法。在acegi中,最简单也是最常用的权限控制是基于…

debian docker_如何在Debian 10上使用Docker和Caddy远程访问GUI应用程序

debian docker介绍 (Introduction) Even with the growing popularity of cloud services, the need for running native applications still exists. 即使云服务越来越流行,仍然需要运行本机应用程序。 By using noVNC and TigerVNC, you can run native applicat…