首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

页面模板的复建

2012-12-05 
页面模板的重构最近在工作中重构一个老系统,烂的地方有很多,但是对于后台的页面模板(我指的是JSP、FreeMark

页面模板的重构

最近在工作中重构一个老系统,烂的地方有很多,但是对于后台的页面模板(我指的是JSP、FreeMarker、Velocity这样的后台模板,JavaScript前端模板不在此讨论范围内),却是我要说的部分,这似乎是一个被人遗忘的小角落。你可以很轻易地找到怎样重构Java类和方法的材料,你的Java代码可以写得很优雅;去搜搜“重构”,到处是怎样重构你的Java代码、C++代码,我们也能找到许多前端设计师对于页面结构的重构,但是重构的范围远非至此。

后台业务逻辑写得再好,一个jsp、ftl模板页面还是可能写上几千行,业务逻辑耦合在呈现代码里面,看起来一团糟,对这部分的重构,既不属于传统的Java代码的重构,也不属于前端工程师的范畴,就这样姥姥不疼、舅舅不爱地被忽略了。但是对一个网站来说,模板数量大得惊人,这是一个不可避开的话题。微博上@zhh-2009说道:

阿里集团有成千上万的系统,一大堆的Java码农,有个更好笑的说法是: 阿里Java码农其实就是velocity模板码农。

把业务逻辑从模板中剥离出去

模板是用来做什么的?就是用来做页面生成和展现的,以分离业务逻辑代码和用户界面代码。理想情况下,模板代码中不应该包含任何业务逻辑的代码在里面。我见过通过向模板传递service对象的方式,再在模板里面通过service获取数据,这是糟糕的做法。模板要做的事情需要保持清晰,不要耦合那些模型层的业务逻辑。

剥离数据处理的重复劳动

Model的数据,距离展现需要的数据,表现形式上会有诸多差异,所以往往在模板拿到以后,还需要经过加工处理才能展示。比如日期型数据,一个java.util.Date对象被送到了模板上,有时需要转换成“2012-11-18”这样的形式,有时需要转换成“09:47:10”这样的形式,于是我见到了大块的页面模板上数据处理的逻辑代码。

当然,这也是可以优化的:

1、使用标签。标签可以封装好一些通用的展示逻辑,这里指的标签就是纯粹为了展示的需要而封装的标签,并非封装了业务逻辑的功能标签。每一个标签都可以变成一个小的MVC组件,一样可以使用模板的方式来输出(而不是再标签实现类里面生写HTML代码)。

2、使用模板宏。比如FreeMarker的模板宏:

用这种方式引入的页面在编译时就会引入进来,里面的数据、包、类拿来即用。

子页面划分

在页面模板重构上,这大概是我们最常用和最基础的办法。我们经常根据最终呈现页面的特点,把页面划分成展示功能独立的几个子页面,然后在需要的位置引入进来,比如JSP的动态引入:

>

更多的例子,在这个我曾经已经谈到过的这个页面聚合的话题。

文章系本人原创,转载请注明作者和出处(?http://www.raychase.net?

注:本博客已经迁移到个人站点??http://www.raychase.net/??,欢迎大家访问收藏,本ITEye博客在数日后将不再更新。

热点排行