关于框架选择的几点思考

来自:J道论坛
作者:zhaoping_yu

我对hgwnet老兄的观点颇有同感。我们公司接触使用Struts可以说是比较早了(大概是从Struts刚推出不久就开始了)。当时Struts也比较轻型,其对MVC的实现确实给我们WEB项目的开发带来很大的方便。但Struts后继版本的发展,我们对其的使用反而越来越不方便了、代价越来越高。首先是Struts本身越来越庞大,原因是它想包含的功能越来越全(如果只是扩展表现层必须的功能也就罢了,可它为什么把数据库等有关的功能也考虑进去啊(我当时用的版本是这样的,其最新的版本是不是还考虑,我没有考察)),导致我们的WEB应用越来越慢,员工的学习曲线越来越陡。它提供了那么多TAG,我们大部分用不到,而且我们需要的它又没提供(或至少不是太对口)。于是我们公司就根据Struts实现MVC的原理实现了自己的MVC框架,它只考虑实现了MVC最基本的东西,相关的代码才十几K,用它替换原先的Struts后,经过相关测试,给我的感觉就象一个人脱掉笨重的外套一样。后来我们公司就一直用这个框架,也没发现对其还有太多的扩展需求。由于这个框架对我们公司来说已经够用了,在Struts后面出现的其他MVC模式框架,我们公司也没有对它们进行跟踪使用。

我写这个并不是排斥使用各种编程框架,相反,如果有好的框架当然要拿过来使用;如果当前的框架对公司目前的项目够用就行了,也没必要去盲目地追求新的框架;使用框架还要考虑学习成本。我们对框架实现者的要求是,开发框架时一定要考虑框架的功能定位,不要去追求大而全的东西。我们需要的是定位准确、容易学习和使用、轻量级的框架。

容我再补充两句吧。

再次郑重声明,我们并不排除使用现有的各种框架,更不主张自己非要重新开发“适合自己”的框架,相反如果有好的框架我们会很乐意使用的(我们更乐于把自己的主要精力放在自己业务的开发上,我们公司用过的框架:webmacro、village、ecp等想必大家有的都没听说过吧?我们对Struts还是非常赞赏和喜爱的),我想表达的观点是:

1、如果要适合自己的框架,一定要毫不犹豫地拿过来用,而且一定要踏踏实实地把它用精、用熟。

2、不要盲目追求技术潮流,只要是当前的框架够用了,就不要再去追求“更好”的。要知道,作为一个公司,如果重新换另一个框架,就要对整个技术团队进行重新培训、学习、重构和维护等等,成本太大了。

3、如果当前的框架实在满足不了项目的需要,可以考虑对当前的框架进行“重构”(我想这也是开源项目的优点吧),前提是你必须对这个框架首先要用精用熟。

所以我们对框架的要求是:框架只做它应该做的事(并做好),但要允许我们应用开发者根据需要对其做适当的适配和扩展,而不要做一个大而全的东西,用来满足我们各种各样的需求。

4、框架应该象模式一样,从实践中来到实践中去,只有从实践中提取出来并放到实践中去检验它,适合自己项目的框架就是好框架。不要泛泛地光从“技术”层面去讨论它们的好坏,要知道一个框架被提出来肯定有它的存在的基础和道理的。

5、当然,如果刚开始选用一个框架时,确实需要在目前现有的同类框架中进行对比比较,从中选一个最好的。但是在选择时不要只考虑技术因素还要考虑其他因素,比如:我们公司是否有这样的人员、技术储备?这个技术是不是对我们这样的小项目来说大材小用了?其维护性如何?等等。

(不知我的意见是不是符合我们讨论的主题,请大家和斑竹见谅)

我自己从事这么多项目的体会是:除非万不得已,不要轻易自己动手写框架,那是一件极痛苦且出力不讨好的事情。现在,在开展一个项目的过程中,每当有人提出要针对本项目做一个框架或类似通用的东西时,我都极其害怕并竭力阻止,结果,大家讨论来讨论去,最后总能从现成的东西中找到比较合适的。

现在我常挂在嘴边的一句话是:最好是好的敌人!

框架之多既是JAVA程序员之福,也是JAVA程序员之痛。

不知这是谁的名言,实在经典。参加工作将近一年了,虽然在公司内部的开发从来没有用到过市面上流行的框架(公司有一套自己独立的框架),但我自己一直醉心于这些FrameWork,总想着来者不拒,兼容并收。基本上我所有的业余时间及部分的工作时间都用学习Struts、学习Hibernate、学习Spring这些框架上了,其间又蜻蜓点水似的接触了Tapestry、laszlo、FLEX,而后兴趣转移到了开源的解决方案,比如OpenCMS、Roller、JForm等,另外还觊觎着python相关的框架和Eclipse RCP。这兴趣广泛的背后是我在这么多框架中迷失已经很久了。今天看到zhaoping_yu的帖子才开始清醒。虽然zhaoping_yu是站在一个管理者的角度,从项目的风险和效益等方面谈论这个问题的,但对于我个人如何不在框架选择中迷失或者说不再技术中迷失依然有着重要的指导意义。

我不是天才(虽然我希望是),也不是不用休息的机器(极端的时候也希望是),我不过是一个很努力的普通JAVA程序员而已。现在框架如此泛滥,我不应该把自己有限的精力投入到无限的框架学习中去,跟进一两个,用心去学,学精,学透,这才是根本。对于框架版本的更新我也实在没有必要如此跟进。紧随流行是有成本的,这成本对于某些人可能不过就是钱而已,而对于我则是时间与精力。

把自己的时间与精力收拢,将80%用于写有点实际意义的软件上,20%用来学习一些新鲜的东西吧。

很久以前的东西,重新整理一下。

此条目发表在arch/management分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据