Evan's Blog

          Java, software development and others.

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            28 隨筆 :: 0 文章 :: 73 評(píng)論 :: 0 Trackbacks

          Author:Benji Smith
          Translator:Evan Wang
          Original Link:Why I Hate Frameworks
          ?
          我正處于建造一個(gè)基于Java的Web應(yīng)用的規(guī)劃階段(是的,必須基于Java,不過我現(xiàn)在還不想討論其中的原因)。在這個(gè)過程中,我評(píng)估了一系列CMS應(yīng)用容器框架,它們大多擁有J2EE門戶、采用與JSR相兼容的MVC架構(gòu)、基于角色等。

          然而在花了幾十個(gè)小時(shí)閱讀功能列表和文檔后,我?guī)缀跸氪料刮业碾p眼。

          首先假設(shè)我決定做一個(gè)調(diào)味品架子。

          我以前做過一些小的木工活,因此我知道自己需要以下東西:一些木頭和基本工具,包括卷尺、鋸子、水平儀和錘子。

          如果我想造一棟房子,而不僅僅是一個(gè)調(diào)味品架,我還是需要卷尺、鋸齒、水平儀和錘子(以及其它東西)。

          所以,我跑到一家五金店,問一個(gè)銷售員,哪里能找到一把錘子。

          “錘子?”他說:“現(xiàn)在幾乎沒人要買錘子了。這個(gè)已經(jīng)過時(shí)了?!?br />
          我很驚訝這樣一種發(fā)展,于是問他為什么。

          “嗯,問題在于有太多種類的錘子。大錘啦,拔釘錘啦,球頭錘等等。你買了其中一種,后來發(fā)現(xiàn)你還需要另外一種怎么辦呢?你下次還得單獨(dú)買一把。因此,大多數(shù)人實(shí)際上需要一把能夠處理他們一生中可能碰到的所有敲敲打打的活的錘子?!?br />
          “嗯,這個(gè)聽起來挺不錯(cuò)。那么我在哪里能夠找到這樣一把通用錘子呢?”

          “不,我們不再銷售了。他們已經(jīng)廢棄了?!?br />
          “真的嗎?我想你剛才不是說通用錘子是將來的趨勢(shì)嘛。”

          “事實(shí)上,如果生產(chǎn)出一種能夠處理所有事情的錘子,反倒不能很有效率地處理其中的任何一件。用一把大錘去拔個(gè)釘子很費(fèi)勁吧。并且,你要?dú)⑺滥闱叭闻训脑?,沒有什么會(huì)比一把球頭錘更適合的了。”

          “這倒是真的。如果沒有人會(huì)買這種通用錘子,而你們又不再銷售老式的各種錘子,那么你們賣什么樣的錘子呢?”

          “事實(shí)上,我們不賣錘子。”

          “那么…”

          “根據(jù)我們的研究,人們需要的根本不是通用錘子。最好還是用不同的錘子做不同的工作。所以,我們現(xiàn)在銷售錘子工廠,它能夠生成任何你需要的錘子。你所需要的只是為錘子工廠招聘員工,開動(dòng)機(jī)器,購買原材料,付公用事業(yè)費(fèi),諸如此類的…這樣你就可以隨時(shí)得到你需要的錘子?!?br />
          “但我真的不想買一個(gè)錘子工廠…”

          “對(duì)頭。我們其實(shí)也不再銷售錘子工廠了?!?br />
          “但你剛剛還說…”

          “我們發(fā)現(xiàn)大多數(shù)人實(shí)際上不需要一整個(gè)錘子工廠。比如說,一些人,就不可能用到球頭錘。(也許他們就沒有前女友。或者他們用冰錐來解決她們。)所以對(duì)一些人來說一個(gè)能生產(chǎn)各種錘子的工廠是沒有什么意義的?!?br />
          “耶,這個(gè)實(shí)際得多。”

          “所以,我們開始銷售錘子工廠的示意圖,以便我們的客戶能夠建造他們自己的錘子工廠,自行設(shè)計(jì)只生成他們實(shí)際需要的那些錘子?!?br />
          “讓我猜猜看。你們現(xiàn)在也不再銷售這些了?!?br />
          “對(duì),真的是這樣。實(shí)際上,人們不會(huì)為了幾把錘子去建一個(gè)工廠。就像我經(jīng)常說的,讓建造工廠的專家去建造工廠吧。”

          “這一點(diǎn)我贊成。”

          “對(duì)的。所以我們停止銷售這些示意圖,轉(zhuǎn)而銷售建造錘子工廠的工廠。每個(gè)建造錘子工廠的工廠都由這方面的頂尖專家建造,所以,你根本不需要操心建造工廠的任何細(xì)節(jié)。你依然擁有自定義錘子工廠的好處,根據(jù)你自己特定的錘子設(shè)計(jì)做出你自己的錘子?!?br />
          “嗯,這個(gè)實(shí)際上并不…”

          “我知道你想說什么!…我們也不再銷售這些東西了。因?yàn)槟承┰?,也沒有多少人買建造錘子工廠的工廠,所以我們又有了新的解決方法?!?br />
          “哇哈。”

          “當(dāng)我們回過頭來審查這個(gè)統(tǒng)一工具的基礎(chǔ)時(shí),發(fā)現(xiàn)人們被必須管理和運(yùn)作一個(gè)制造錘子的工廠以及它所生成的錘子工廠給困住了。當(dāng)你需要處理類似的建造卷尺工廠的工廠,水平儀工廠的工廠,鋸子工廠的工廠的時(shí)候,這很快就會(huì)變得相當(dāng)棘手。更別提木材生產(chǎn)集團(tuán)公司了。當(dāng)我們審查這種狀況的時(shí)候,我們意識(shí)到這對(duì)于僅僅想做個(gè)調(diào)味品架子的人來說過于復(fù)雜了。”

          “是啊,這可不是開玩笑?!?br />
          “所以,這個(gè)星期,我們正在推廣一種通用的建造工廠,用來建造生產(chǎn)工具工廠的工廠,這樣你所有的用來建造不同種類工具的工廠的工廠就可以由一個(gè)單一的、統(tǒng)一的工廠來建造了。這種工廠將僅僅生產(chǎn)你所需要的工具工廠的建造工廠,而這些建造工廠將生成一個(gè)僅生產(chǎn)你自定義的工具的工廠來。你將得到你要的那種錘子,你要的卷尺,所有這一切僅僅需要按一下按鈕(當(dāng)然,也許你要發(fā)布一些配置文件以便它能根據(jù)你的期望來工作)。”

          “所以,你們根本就沒有什么錘子?不是嗎?”

          “是的。如果你需要一個(gè)高質(zhì)量的,工業(yè)標(biāo)準(zhǔn)的調(diào)味料架子,你絕對(duì)需要這些高級(jí)玩意,而不是從那些破破爛爛的五金店里就買得到的錘子?!?br />
          “現(xiàn)在所有的人都在這么做嗎?當(dāng)他們需要一把錘子的時(shí)候,所有的人都在使用一個(gè)通用的能夠生產(chǎn)工具工廠的建造工廠的工廠嗎?”

          “是的。”

          “那…好吧。我想這就是我必須要做的。如果這是處理事情的既定方法,我想我最好還是學(xué)學(xué)怎么來用吧。”

          “祝你好運(yùn)!”

          “這些都有文檔的,對(duì)吧?”

          現(xiàn)在我已經(jīng)自豪地?fù)碛辛俗约旱耐ㄓ玫墓ぞ吖S的建造工廠的建造工廠,我很高興地知道它與GPTBFF 0.97 RC2標(biāo)準(zhǔn)草案兼容,這是“通用的工具工廠的建造工廠的建造工廠”的標(biāo)準(zhǔn)。

          很幸運(yùn)地,面向工具的元工廠聯(lián)盟里的工人都通過了這個(gè)版本的標(biāo)準(zhǔn)的驗(yàn)證。

          然而標(biāo)準(zhǔn)之爭(zhēng)即將開始:一種名為UXCTBFFF(Universal Trans-Continental Tool Building FFF)很有競(jìng)爭(zhēng)力的原工廠技術(shù)承諾將統(tǒng)一建造工廠的工廠的建造行業(yè),以使之符合那些同時(shí)使用公制和當(dāng)?shù)囟攘繂挝坏膰业臉?biāo)準(zhǔn)。

          我的理解是只需要?jiǎng)?chuàng)建一個(gè)貫穿用戶界面的抽象層的補(bǔ)丁包,就可以使GPTBFF 0.97 RC2與UXCTBFF標(biāo)準(zhǔn)達(dá)到95%左右的兼容。

          真是太好了!

          想必這種新的發(fā)展能夠提升我的調(diào)料架的質(zhì)量(一旦我搭建好我的工具工廠的建造工廠的建造工廠并使之運(yùn)行,培訓(xùn)好工人,從柬埔寨進(jìn)口來原木,在最近的某天,我就要開始做那個(gè)調(diào)料架了)。


          譯后記:
          首先,洋人這種以調(diào)侃方式寫的技術(shù)文章在國內(nèi)很少見,國內(nèi)的“技術(shù)專家”都過于嚴(yán)肅了,抑或其實(shí)并不了解這些技術(shù)的本質(zhì)而沒辦法聯(lián)想,只好照本宣科了。其次,當(dāng)Java開發(fā)領(lǐng)域充斥了這么多的框架之后,你還能把持得住自己?jiǎn)??在?shí)際的軟件企業(yè)中,怎樣搭建自己的開發(fā)環(huán)境和平臺(tái)并不斷改進(jìn)之,而不是盲目地引進(jìn)最新框架和技術(shù),是所有的技術(shù)領(lǐng)導(dǎo)人所要正視的頭等大事。不過,在國內(nèi),往往重技術(shù)而輕管理,當(dāng)然,這不是這篇文章所要討論的問題。


          Benji Smith 的回應(yīng):Why China Hates Frameworks

          同時(shí)測(cè)試一下用Windows Live Writer更新Blog,不過樣式的下載好象還是有點(diǎn)不盡如人意。(--updated 2006-12-14)
          posted on 2006-03-11 17:04 Evan 閱讀(5790) 評(píng)論(23)  編輯  收藏

          評(píng)論

          # re: [翻譯]我為什么討厭框架 2006-03-11 22:13 lzcarl
          不錯(cuò),很深入淺出
          通用性和易用性真是很難兼顧  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-03-11 22:54 Evan
          @lzcarl
          這個(gè)與通用性和易用性無關(guān)啊,主要是要避免過度設(shè)計(jì)?,F(xiàn)在的框架,做著做著就開始發(fā)胖。連Spring也不能免俗啊!  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-03-12 22:32 Jeff_Liu
          很有道理
          現(xiàn)在我負(fù)責(zé)的項(xiàng)目都反樸歸真了,基本用最簡(jiǎn)單的方法
          譬如mvc框架,自己寫了一個(gè)簡(jiǎn)單的,很容易控制。
          用jdbc代替hibernate,雖然開發(fā)效率低了點(diǎn),運(yùn)行效率還是比hibernate好的哈哈  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-03-12 22:57 Evan
          @Jeff_Liu
          你也真有膽這么說啊:)。不過,也用不著走極端啦。很多框架也還是有很多值得借鑒的東西。不過,我倒真不反對(duì)自己公司弄個(gè)小而精致一點(diǎn)的開發(fā)平臺(tái),作為每個(gè)項(xiàng)目的基礎(chǔ);否則,現(xiàn)在框架的更新速度如此快,你怎么跟啊。另外,如果你真直接用jdbc的話,一定要看看Spring它自己的JdbcTemplate的實(shí)現(xiàn),是我迄今所知道的最好的一種不用O/R mapping的解決方法。  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-03-12 23:11 太陽底下
          @Jeff_Liu
          應(yīng)該說不同的應(yīng)用應(yīng)該有不同的做法,避免過度的設(shè)計(jì),復(fù)雜應(yīng)用就要復(fù)雜設(shè)計(jì)  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-03-16 15:42 CROKY
          框架 把所有的錯(cuò)誤歸納為一個(gè)錯(cuò)誤,讓你感覺錯(cuò)誤少了,其實(shí)是錯(cuò)誤增加了。
          框架 把一大群有用沒用的東西加在一起讓你選擇著用,事實(shí)上不管有用沒有用,它都在運(yùn)行。
          框架 好象為你提供了一個(gè)更簡(jiǎn)單的解決問題的思路,其實(shí)等你把他綜合起來想,發(fā)現(xiàn),除了少寫了一些代碼外也額外多了一些代碼,好處是讓你懶惰了一點(diǎn),確讓你的計(jì)算機(jī)更加累了。(繞的彎子太多)而且最噴血的是,你會(huì)發(fā)現(xiàn)它其實(shí)更難了。
          框架 就是來忽悠你我他的。
          框架 就是毒品,等你用習(xí)慣了就不得不承認(rèn)它的好,哪怕它爛的不行你也要為它爭(zhēng)點(diǎn)面子。
            回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-03-21 10:14 云霄
          現(xiàn)在的設(shè)計(jì)通病是不先討論做什么,而先討論怎么做。然后對(duì)別人說“我們已經(jīng)可以應(yīng)付你的一些要求了,好,現(xiàn)在說說你想要什么?”典型的本末倒置,自我主義。  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-03-21 11:56 無名
          確實(shí)比較實(shí)在. 前一階段, 我們項(xiàng)目組做了有關(guān)java的評(píng)估和學(xué)習(xí). 基本上, 已經(jīng)把我們看暈了.  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-03-21 15:02 henkoo
          太贊了

          過度重構(gòu),過度設(shè)計(jì)

          關(guān)鍵是夠用,變化發(fā)展是沒有一勞永逸的解決辦法的  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-03-22 11:10
          哈哈,與我心有戚戚焉  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-09-12 19:42 yes
          受教了,謝謝樓主!  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-10-22 20:54 efanstudio
          我開發(fā)J2EE從來不用框架,實(shí)際上我個(gè)人認(rèn)為現(xiàn)在的J2EE框架絕大多數(shù)都已經(jīng)過了-使用它們并沒有降低開發(fā)的復(fù)雜性,反而增加了開發(fā)的難度!  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-10-22 20:58 efanstudio
          spring的JdbcTemplate的確寫得非常好,我覺得可以直接調(diào)用它來屏蔽掉JDBC中的一些比較繁瑣的細(xì)節(jié)處理,但我非常反感編寫又臭又長(zhǎng)的配置文件,很多時(shí)候,我們的應(yīng)用并沒有真正復(fù)雜到要考慮到幾乎所有的細(xì)節(jié)!而國內(nèi)的開發(fā)習(xí)慣是,很少有人能在同一個(gè)項(xiàng)目中做好幾個(gè)版本,而對(duì)于別人開發(fā)的前面的版本,是采用完全拋棄的態(tài)度,所以你預(yù)先設(shè)計(jì)的再好都沒有多大的實(shí)用價(jià)值!  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-11-28 12:53 pldmusic
          其實(shí)作者的觀點(diǎn)就是這樣:要用錘子的時(shí)候用錘子,要用錘子工廠的時(shí)候用工廠  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2006-11-30 09:31 nxliu
          看到你這個(gè)文章,還以為是抄襲的 :) 原來是原創(chuàng)的,我也譯過該文:
          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>  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2007-10-06 21:06 photon
          框架這種東西,要辯證地看。它是對(duì)過去開發(fā)經(jīng)驗(yàn)地總結(jié),故可以用于學(xué)習(xí)借鑒,如果方便也可以采用拿來主義直接使用。但我們還要記著,盡信書不如無書,過猶不及。  回復(fù)  更多評(píng)論
            

          # re: [翻譯]我為什么討厭框架 2012-04-19 18:13 CSDN_Softworm
          真不錯(cuò)!

          以前早已明白的道理,過了幾年又忘了,又得再回來看。  回復(fù)  更多評(píng)論
            

          # payday loan Canada 2012-08-14 22:18 payday loan Canada
          odwegfm http://paydayloansstg.info/ payday loan Canada  回復(fù)  更多評(píng)論
            

          # payday loans 2012-09-26 08:39 payday loans
          gvqmfm http://uspaydayloansff.com/ payday loans  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 时尚| 喜德县| 东光县| 布拖县| 孟津县| 千阳县| 长白| 崇阳县| 开化县| 南靖县| 图们市| 万荣县| 陆丰市| 曲阜市| 民和| 香格里拉县| 滦平县| 平原县| 噶尔县| 长葛市| 彭山县| 安新县| 莱阳市| 株洲市| 合江县| 西畴县| 安平县| 浑源县| 榆树市| 徐汇区| 武陟县| 滕州市| 于都县| 日照市| 新余市| 浦江县| 武清区| 江油市| 濉溪县| 镇原县| 万州区|