Evan's Blog

Java, software development and others.

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  28 随笔 :: 0 文章 :: 73 评论 :: 0 Trackbacks

Author:Benji Smith
Translator:Evan Wang
Original Link:Why I Hate Frameworks
 
我正处于建造一个基于Java的Web应用的规划阶段(是的,必须基于Java,不过我现在还不想讨论其中的原因)。在这个过程中,我评估了一系列CMS应用容器框架,它们大多拥有J2EE门户、采用与JSR相兼容的MVC架构、基于角色等。

然而在花了几十个小时阅读功能列表和文档后,我几乎想戳瞎我的双眼。

首先假设我决定做一个调味品架子。

我以前做过一些小的木工活,因此我知道自己需要以下东西:一些木头和基本工具,包括卷尺、锯子、水平仪和锤子。

如果我想造一栋房子,而不仅仅是一个调味品架,我还是需要卷尺、锯齿、水平仪和锤子(以及其它东西)。

所以,我跑到一家五金店,问一个销售员,哪里能找到一把锤子。

“锤子?”他说:“现在几乎没人要买锤子了。这个已经过时了。”

我很惊讶这样一种发展,于是问他为什么。

“嗯,问题在于有太多种类的锤子。大锤啦,拔钉锤啦,球头锤等等。你买了其中一种,后来发现你还需要另外一种怎么办呢?你下次还得单独买一把。因此,大多数人实际上需要一把能够处理他们一生中可能碰到的所有敲敲打打的活的锤子。”

“嗯,这个听起来挺不错。那么我在哪里能够找到这样一把通用锤子呢?”

“不,我们不再销售了。他们已经废弃了。”

“真的吗?我想你刚才不是说通用锤子是将来的趋势嘛。”

“事实上,如果生产出一种能够处理所有事情的锤子,反倒不能很有效率地处理其中的任何一件。用一把大锤去拔个钉子很费劲吧。并且,你要杀死你前任女友的话,没有什么会比一把球头锤更适合的了。”

“这倒是真的。如果没有人会买这种通用锤子,而你们又不再销售老式的各种锤子,那么你们卖什么样的锤子呢?”

“事实上,我们不卖锤子。”

“那么…”

“根据我们的研究,人们需要的根本不是通用锤子。最好还是用不同的锤子做不同的工作。所以,我们现在销售锤子工厂,它能够生成任何你需要的锤子。你所需要的只是为锤子工厂招聘员工,开动机器,购买原材料,付公用事业费,诸如此类的…这样你就可以随时得到你需要的锤子。”

“但我真的不想买一个锤子工厂…”

“对头。我们其实也不再销售锤子工厂了。”

“但你刚刚还说…”

“我们发现大多数人实际上不需要一整个锤子工厂。比如说,一些人,就不可能用到球头锤。(也许他们就没有前女友。或者他们用冰锥来解决她们。)所以对一些人来说一个能生产各种锤子的工厂是没有什么意义的。”

“耶,这个实际得多。”

“所以,我们开始销售锤子工厂的示意图,以便我们的客户能够建造他们自己的锤子工厂,自行设计只生成他们实际需要的那些锤子。”

“让我猜猜看。你们现在也不再销售这些了。”

“对,真的是这样。实际上,人们不会为了几把锤子去建一个工厂。就像我经常说的,让建造工厂的专家去建造工厂吧。”

“这一点我赞成。”

“对的。所以我们停止销售这些示意图,转而销售建造锤子工厂的工厂。每个建造锤子工厂的工厂都由这方面的顶尖专家建造,所以,你根本不需要操心建造工厂的任何细节。你依然拥有自定义锤子工厂的好处,根据你自己特定的锤子设计做出你自己的锤子。”

“嗯,这个实际上并不…”

“我知道你想说什么!…我们也不再销售这些东西了。因为某些原因,也没有多少人买建造锤子工厂的工厂,所以我们又有了新的解决方法。”

“哇哈。”

“当我们回过头来审查这个统一工具的基础时,发现人们被必须管理和运作一个制造锤子的工厂以及它所生成的锤子工厂给困住了。当你需要处理类似的建造卷尺工厂的工厂,水平仪工厂的工厂,锯子工厂的工厂的时候,这很快就会变得相当棘手。更别提木材生产集团公司了。当我们审查这种状况的时候,我们意识到这对于仅仅想做个调味品架子的人来说过于复杂了。”

“是啊,这可不是开玩笑。”

“所以,这个星期,我们正在推广一种通用的建造工厂,用来建造生产工具工厂的工厂,这样你所有的用来建造不同种类工具的工厂的工厂就可以由一个单一的、统一的工厂来建造了。这种工厂将仅仅生产你所需要的工具工厂的建造工厂,而这些建造工厂将生成一个仅生产你自定义的工具的工厂来。你将得到你要的那种锤子,你要的卷尺,所有这一切仅仅需要按一下按钮(当然,也许你要发布一些配置文件以便它能根据你的期望来工作)。”

“所以,你们根本就没有什么锤子?不是吗?”

“是的。如果你需要一个高质量的,工业标准的调味料架子,你绝对需要这些高级玩意,而不是从那些破破烂烂的五金店里就买得到的锤子。”

“现在所有的人都在这么做吗?当他们需要一把锤子的时候,所有的人都在使用一个通用的能够生产工具工厂的建造工厂的工厂吗?”

“是的。”

“那…好吧。我想这就是我必须要做的。如果这是处理事情的既定方法,我想我最好还是学学怎么来用吧。”

“祝你好运!”

“这些都有文档的,对吧?”

现在我已经自豪地拥有了自己的通用的工具工厂的建造工厂的建造工厂,我很高兴地知道它与GPTBFF 0.97 RC2标准草案兼容,这是“通用的工具工厂的建造工厂的建造工厂”的标准。

很幸运地,面向工具的元工厂联盟里的工人都通过了这个版本的标准的验证。

然而标准之争即将开始:一种名为UXCTBFFF(Universal Trans-Continental Tool Building FFF)很有竞争力的原工厂技术承诺将统一建造工厂的工厂的建造行业,以使之符合那些同时使用公制和当地度量单位的国家的标准。

我的理解是只需要创建一个贯穿用户界面的抽象层的补丁包,就可以使GPTBFF 0.97 RC2与UXCTBFF标准达到95%左右的兼容。

真是太好了!

想必这种新的发展能够提升我的调料架的质量(一旦我搭建好我的工具工厂的建造工厂的建造工厂并使之运行,培训好工人,从柬埔寨进口来原木,在最近的某天,我就要开始做那个调料架了)。


译后记:
首先,洋人这种以调侃方式写的技术文章在国内很少见,国内的“技术专家”都过于严肃了,抑或其实并不了解这些技术的本质而没办法联想,只好照本宣科了。其次,当Java开发领域充斥了这么多的框架之后,你还能把持得住自己吗?在实际的软件企业中,怎样搭建自己的开发环境和平台并不断改进之,而不是盲目地引进最新框架和技术,是所有的技术领导人所要正视的头等大事。不过,在国内,往往重技术而轻管理,当然,这不是这篇文章所要讨论的问题。


Benji Smith 的回应:Why China Hates Frameworks

同时测试一下用Windows Live Writer更新Blog,不过样式的下载好象还是有点不尽如人意。(--updated 2006-12-14)
posted on 2006-03-11 17:04 Evan 阅读(5758) 评论(23)  编辑  收藏

评论

# re: [翻译]我为什么讨厌框架 2006-03-11 22:13 lzcarl
不错,很深入浅出
通用性和易用性真是很难兼顾  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-03-11 22:54 Evan
@lzcarl
这个与通用性和易用性无关啊,主要是要避免过度设计。现在的框架,做着做着就开始发胖。连Spring也不能免俗啊!  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-03-12 22:32 Jeff_Liu
很有道理
现在我负责的项目都反朴归真了,基本用最简单的方法
譬如mvc框架,自己写了一个简单的,很容易控制。
用jdbc代替hibernate,虽然开发效率低了点,运行效率还是比hibernate好的哈哈  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-03-12 22:57 Evan
@Jeff_Liu
你也真有胆这么说啊:)。不过,也用不着走极端啦。很多框架也还是有很多值得借鉴的东西。不过,我倒真不反对自己公司弄个小而精致一点的开发平台,作为每个项目的基础;否则,现在框架的更新速度如此快,你怎么跟啊。另外,如果你真直接用jdbc的话,一定要看看Spring它自己的JdbcTemplate的实现,是我迄今所知道的最好的一种不用O/R mapping的解决方法。  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-03-12 23:11 太阳底下
@Jeff_Liu
应该说不同的应用应该有不同的做法,避免过度的设计,复杂应用就要复杂设计  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-03-16 15:42 CROKY
框架 把所有的错误归纳为一个错误,让你感觉错误少了,其实是错误增加了。
框架 把一大群有用没用的东西加在一起让你选择着用,事实上不管有用没有用,它都在运行。
框架 好象为你提供了一个更简单的解决问题的思路,其实等你把他综合起来想,发现,除了少写了一些代码外也额外多了一些代码,好处是让你懒惰了一点,确让你的计算机更加累了。(绕的弯子太多)而且最喷血的是,你会发现它其实更难了。
框架 就是来忽悠你我他的。
框架 就是毒品,等你用习惯了就不得不承认它的好,哪怕它烂的不行你也要为它争点面子。
  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-03-21 10:14 云霄
现在的设计通病是不先讨论做什么,而先讨论怎么做。然后对别人说“我们已经可以应付你的一些要求了,好,现在说说你想要什么?”典型的本末倒置,自我主义。  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-03-21 11:56 無名
確實比較實在. 前一階段, 我們項目組做了有關java的評估和學習. 基本上, 已經把我們看暈了.  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-03-21 15:02 henkoo
太赞了

过度重构,过度设计

关键是够用,变化发展是没有一劳永逸的解决办法的  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-03-22 11:10
哈哈,与我心有戚戚焉  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-09-12 19:42 yes
受教了,谢谢楼主!  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-10-22 20:54 efanstudio
我开发J2EE从来不用框架,实际上我个人认为现在的J2EE框架绝大多数都已经过了-使用它们并没有降低开发的复杂性,反而增加了开发的难度!  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-10-22 20:58 efanstudio
spring的JdbcTemplate的确写得非常好,我觉得可以直接调用它来屏蔽掉JDBC中的一些比较繁琐的细节处理,但我非常反感编写又臭又长的配置文件,很多时候,我们的应用并没有真正复杂到要考虑到几乎所有的细节!而国内的开发习惯是,很少有人能在同一个项目中做好几个版本,而对于别人开发的前面的版本,是采用完全抛弃的态度,所以你预先设计的再好都没有多大的实用价值!  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-11-28 12:53 pldmusic
其实作者的观点就是这样:要用锤子的时候用锤子,要用锤子工厂的时候用工厂  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2006-11-30 09:31 nxliu
看到你这个文章,还以为是抄袭的 :) 原来是原创的,我也译过该文:
http://nxliu.spaces.live.com/?_c11_BlogPart_blogpart=blogview&_c=BlogPart&partqs=cat%3d%25e7%25bf%25bb%25e8%25af%2591

<a href="http://nxliu.spaces.live.com/?_c11_BlogPart_blogpart=blogview&_c=BlogPart&partqs=cat%3d%25e7%25bf%25bb%25e8%25af%2591">我为什么讨厌框架</a>  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2007-10-06 21:06 photon
框架这种东西,要辩证地看。它是对过去开发经验地总结,故可以用于学习借鉴,如果方便也可以采用拿来主义直接使用。但我们还要记着,尽信书不如无书,过犹不及。  回复  更多评论
  

# re: [翻译]我为什么讨厌框架 2012-04-19 18:13 CSDN_Softworm
真不错!

以前早已明白的道理,过了几年又忘了,又得再回来看。  回复  更多评论
  

# payday loan Canada 2012-08-14 22:18 payday loan Canada
odwegfm http://paydayloansstg.info/ payday loan Canada  回复  更多评论
  

# payday loans 2012-09-26 08:39 payday loans
gvqmfm http://uspaydayloansff.com/ payday loans  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: