Web项目开发中的技术选型

Web项目开发中的技术选型

不同项目在技术选型时可供选择的内容不一样,好比是一个UI项目需要考虑的可能是采取哪种UI库,可以是AWT、SWING还有现在流行的SWT等,这些年对我自己而言,做的Web项目最多,今天我想说说的Web项目的技术选型,而且只是针对于采用Java开发的Web项目。

不考虑一些特殊的业务,一般的Web项目需要做技术选型的内容包括几个方面:操作系统、数据库、持久层框架、控制层、表现层,当然这些层还可能进行更进一步的细化。

  1. 操作系统,操作系统的选择一般要根据项目的规模、客户的特定要求以及自身的熟练程度来进行考虑,尽管可能你的客户不会干预你对操作系统的选择,但你还是应当把你的项目开发成支持多种平台,因为Java语言本身就是跨平台的,因此在写程序时需要了解不同操作系统之间的差别,例如路径分隔符的差别等等。
  2. 数据库,在考虑选择数据库时更多的不是一些技术因素,很多时候数据库的选型受到了客户的限制,另外还包括项目的数据规模、开发者的熟悉程度、所采用的操作系统、项目预算等等。

一般情况上面的两个选型不会存在太多的分歧,虽然各自都有多种可供选择的产品,当往往跟项目相关的所有人员在此二点上都能很好的达成共识。真正的问题都是跟Java语言本身相关的一些内容,而且不同的看法皆来自于开发者本身。

  1. 开发环境。开发环境的选择更多的受项目经理的个人喜好所决定,当然有时候也与一些特定的应用平台有关系,例如Oracle的OAS如果用JDeveloper开发比较方便,同时好比WebSphere对于WSAD。除去这个因素之外主流的开发环境无非就是Eclipse & JBuilder。二者实在没有什么好比较的,最大的区别就是JBuilder是需要花钱去买的,因此如果仅在这二者中作选择的话,两个因素是你所需要考虑的,第一是钱(因为我想你肯定也不希望以后收到BORLAND公司的律师函),再有一个是项目组开发人员的习惯,看看多数人更喜欢用哪一个环境,不过这第二个因素也不要考虑太重。
  2. 应用服务器。企业用户一般不太可能选择一些免费开源的产品,商用的应用服务器最主流的还是WebSphere以及WebLogic,而且这两个服务器也相应推出了绑定不同功能的版本,例如不支持EJB以及一些高级特性的Express版本,价钱当然也相应的比较便宜。免费的产品经过大浪淘沙最流行的还是Tomcat、Resin以及符合J2EE规范的JBOSS。不管选什么服务器,你的项目都应该是使用J2EE的标准,而不是只能运行于某个服务器的程序。

以上四点是涉及到程序的开发以及运行环境,而开发技术本身关系不是太紧密,在开发的过程中应该尽量避免跟这些环境过于紧密的联系。接下来的内容就是一个开发人员非常关心的问题,包括表现层采用的技术、采用何种MVC的框架以及何种数据持久层的实现,是否采用EJB或者J2EE其他的一些特性等等。

  1. 表现层。使用Java开发web项目在表现层上有很多可选的技术实现,例如JSP、velocity、FreeMarker,同时你也可以自己定义一种模板实现。所有的这些东西当然还是JSP占的比例最大,毕竟每个开发人员在学习J2EE的时候肯定会接触到的,而且绝大部分的web项目也都是采用JSP开发。JSP的功能超级强大,你可以在JSP上做任何你想做的事情,整个项目的资源都可以被JSP轻易的访问到。因此我们也会经常看到很多糟糕的JSP代码,例如在页面上连接数据库执行SQL语句等操作。而最近在国内开始流行的模板技术例如Velocity、FreeMarker就比较好的解决了这个问题,功能上的限制避免了在JSP可能带来的弊病。
    尽管JSP有很多弊病,但是作为JSP的附带产物——标签库的功能确实无可替代的,而且也可以找到很多开源的标签库,可大大的加快开发的速度,如果你决定采用JSP来编写页面,你应该从制度上限制不应该在JSP页面上编写业务逻辑代码。
    一旦你的开发小组对JSP已经是轻车熟路了,那不妨试试Velocity或者FreeMarker,在我看来Velocity更加简单,容易上手些,而且可以是页面的代码更加清晰易理解。
  2. 控制层。争论比较多的也就在控制层,因为有很多可以选择,而且各有千秋,例如Struts、WebWork、Turbine、Tapestry以及Spring等等,或者说Spring应该不属于这个范畴,不管仁者见仁。关于这几个框架的应用比例从书店里卖书的情况便知一二,多数都是Struts开发方面的书,其他的零星一两本而已。也就说明Struts有着非常广泛的群众基础,用得多了,批评也就接踵而来,于是很多技术牛人开始推崇Struts外的其他控制框架。的确有些框架确实比较好的弥补了Struts本身的一些不足,但是推崇者往往只提一点、不及其余。
    大家或许可以看出我一定是倾向Struts框架,是的。选择它的原因不外乎几个:1、功能比较全面;2、可供参考的资料非常之多;3、普及程度非常高,容易招到熟悉的开发人员。但是Struts中的Action机制让我有点反感,因为直接导致大量的Action类,虽然可以使用DispatchAction来避免这个问题,但总感觉不太漂亮,因此我在Struts中引入Turbine的做法,自动实现eventSubmit_Xxxx -> doXxxxx的映射关系,也就是根据提交按钮的名称自动映射到一个Action类的相应方法,实现的办法也仅仅是在原有Action类上继承一个子类覆盖了execute的方法,并采用反射机制执行对应的Method。这样做可以将相同模块的功能集成在同一个Action类中。例如UserAction可以包括登录、注销等等用户相关的操作。
    取长补短是我在应用框架上的一些建议,因为每个框架都有自己的长项与不足,把这些长项都结合起来就可以大大的提高开发的效率以及优化代码的层次结构。
  3. 数据持久层。使用一些数据持久层的实现框架的好处是自动化,可以大大减少程序的代码行数,避免编写大量重复冗余、无趣的数据操作语句。在这层中我不知道除了Hibernate还有什么其他更好的选择,要么是一些需要付费的产品,要么就是不够轻量级。当然同样存在的问题就是其他的产品很难找到沟通交流的渠道。

我想说明的是:前面这些内容并不是凭空瞎扯,在我的很多项目中都蔓延着这些思路,包括大家可见的 DLOG4J (http://dlog4j.sourceforge.net) 。我也经历过很多不同的开发方法包括:JSP+Servlet;JSP+Goweb(我自己写的一个简单框架,后来该框架被用来扩展Struts);JSP+Struts(Extended);JSP+Struts(Extended)+Hibernate;Velocity+Struts(Extended)+Hibernate。每一次的改变都有切身的体会,而已经有好几个项目是采用最后一种选型,也证明了它比之前任何一种更加有生命力。

当你在犹豫如何确定某种开发技术时,在保持一定的前瞻性下,选择最适合你还有你的开发小组的,尽管它不一定是最好的,尽管它可能还有很多不足。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值