玩wang CakePHP
做了一段时间的 CakePHP 开发,一个类似 RoR 的 PHP 框架,让我对 Web 编程又开始感兴趣了,之前用 Java 开发 Web 程序着实让人失望。静下心来总结一下,其实 Java 开发 Web 应用也可以模仿 RoR 的,虽然类似的框架已经有一些了,但是我还是觉得应该尽可能的简单......
采用一个非 JSP 的模版引擎。大家喜欢使用 JSP 当模版,当然了,默认就是这样的。不过 JSP 第一次编译着实让人很烦燥,我觉得 Web 开发的速度优势不明显了。开发 ASP/PHP,边写程序边刷新页面是挺实用的方法,页面有太多的布局、UI元素,需要频繁的刷新来进行调整,这点 JSP 让人调的很麻烦。所以选择一个好的模版引擎可以省不少事情,我最喜欢 FreeMarker,当然还有 Velocity 可以用,还有一个有意思的东西,Antlr 配套的 Stringtemplate 也可以拿来用,非常不错。
使用动态语言编写 Controller。Controller 的职责出要是处理一些控制逻辑,数据库的操作它不需要来负责,所以 Controller 随着 View 的不同改动太大了,但也都是微调。因为经常需要改变,所以每次都编译一边实在恶心。当然了,各种框架几乎都提供了容器外测试的环境,我个人觉得后期可以将稳定的 Controller 写回静态类以提高性能并进行详细功能测试,但一般来说大可不必。采用一种好的动态语言可以省不少事情,譬如 Java 提供了统一的 BSF 可以选用很多动态语言,譬如 JavaScript,Jython,Groovy, BeanShell,JRuby 等等。初期效率不是最关键的因素,再说 Web 应用的性能瓶颈往往在数据库,Web 框架没必要太复杂。
业务、数据层可以脱离容器开发。这一层是 Java 的强项,完全可以脱离容器开发,进行单元测试,这对于 Java 开发人员往往是最得心应手的工作。
如果有时间到想用 Java 做一个这样的东西玩玩,似乎还漏了最重要的一点,Convention over Configuration,有了这个 Magic,效率才可能有魔术般的提升!
1、JSP:我认为让它作为模版引擎是大材小用了,但是并不说明不适合。我觉得JSP还是很优秀的,性能不错,而且也很简单。必要的时候你还可以利用JSP的强大功能投机取巧。
2、Controler:我觉得措辞有点*。应该说脚本语言写逻辑。是否动态倒不是最重要的。这个是没话说!不过脚本语言的调试还是需要加强。
3、测试:单元测试、集成测试、功能测试,互相不能取代。这个每种语言都应该做到。
CoC这个东西,我觉得和语言机制还是有关系的,如果用Java,用反射,就有点不自然。而Ruby里面的元编程好像会带来很多方便。而PHP这种脚本中的弱检查机制好像也能带来好处。可怜的Java。
永远无休止的 Web 框架之战,几乎主流的编程语言都涉及了 Web 开发,从 ASP/PHP/JSP 的兴起,从 Model1 到 Model2 的转变,几年间大家从简单的 ASP + ADO + XXX 到使用各种框架,框架优劣的讨论几乎成了争论的焦点。
我也是从 ASP 时代过来的,记得高中用 ASP 写了第一个留言板程序之后发现编程原来竟可以这么简单,随之接触了 Linux,接触了 PHP,接触了诸多开源的东西,至少那几年来写 Web 程序从来没有涉及过框架一说。直到用起了 Java,接触了 JSP,才逐步从 Model1 向 Model2 转变。JSP 一点都不比 ASP/PHP 简单,甚至开发速度也很慢,从一开始接触 Struts 就没发觉那点好,也从来没用 Struts 正经做过什么东西。从 Struts 诞生到现在5年多了吧,其间大大小小的框架层出不穷,似乎代码的 copy-paste 开发散发出不好的味道,大家纷纷追求更高层次的代码重用,掌握各种各样的框架成了求职的必备技能。不知不觉我们在走向一个极端,Java 各式的框架是在太多了,光是 Web 框架就够让人看花眼的了。
并不是所有时候框架都能带给开发者方便,当我在用 Java 开发 Web 的时候总是第一感觉想到我熟悉的 Spring-MVC,想到 Spring + Hibernate,自己动手搭建这么一个环境大概20分钟就过去了。就算能够开始写东西了也无法快速的看到原型,层次太清晰了,以至于不得不一层一层写,一层一层测试,写到 Web 层的时候发现自己写的一大半代码都是重复的。在这点上,脚本语言要方便得多,写 PHP 的 ShiningRay 写一个相同功能的程序甚至只需要 Java 版本的 50% 代码行数还不到,而且速度可以快上1倍,这还是保守估计。
于是太多的 Java Developer 投奔 RoR 的怀抱了,虽然我没有亲自试过 RoR,但是用过类 RoR 的框架 CakePHP,开发效率的确很高,框架的作用被很好的隐藏起来了。Convertion over Configuration,着实 Pragmatic。想当年大家都在写 Model1 的 Web 程序,Model2 的出现促生了无数 Web 框架诞生,各种各样的新鲜想法诞生了,出现了一批优秀的 Web 框架,但都自成体系。时间长了,大家都累了,学一个框架已经远远不够了,至少也要了解另外几个才行。RoR 推行的概念很好,抛开其他因素,按照约定俗成的规范来写程序。可能在 DHH 之前已经有很多人这么做过了,只是没有能够像 RoR 宣传的这么好罢了。从合到分,从分到合,技术总是在不断变换中前进,大方向是好的,都是为了提高生产力,关于语言、平台方面的争论就少一点吧,与其无休止的口水战还不如踏踏实实的写好程序。
没有评论:
发表评论