在我閱讀此書(shū)之前,我應(yīng)該總結(jié)一下目前在 J2EE 方面所具有的基礎(chǔ)知識(shí)。在我看來(lái), J2EE 是一個(gè)極其龐大的系統(tǒng)架構(gòu),對(duì)于 J2EE 有一些初步的認(rèn)識(shí),也做過(guò)一些基于此架構(gòu)的小型或中小型項(xiàng)目,比如基于此技術(shù)架構(gòu)的網(wǎng)站,一些應(yīng)用系統(tǒng)等。 J2EE 包括以下部分:

對(duì)于 EJB ,我僅僅只是知道其基本概念,從未有過(guò)深入的學(xué)習(xí)和研究,也就是說(shuō)有一個(gè)膚淺的認(rèn)識(shí)。而對(duì)于 IoC 和 AOP 則有一定的了解,因?yàn)橹霸趯W(xué)習(xí) Spring 的時(shí)候有過(guò)一些深入的學(xué)習(xí),但是對(duì)于 AOP 的理解是遠(yuǎn)遠(yuǎn)不夠的。
好了,開(kāi)始言歸正傳,真正開(kāi)始談?wù)勔恍┪易约旱哪w淺觀點(diǎn)(甚至是錯(cuò)誤的觀點(diǎn))。
書(shū)中談到“ J2EE 應(yīng)用項(xiàng)目至少和從前的非 J2EE 項(xiàng)目一樣容易失敗――如果不是更容易失敗的話”( page 4 ),我認(rèn)為一個(gè)項(xiàng)目的失敗與該項(xiàng)目采用何種框架和技術(shù)有太大的關(guān)系,在這個(gè)時(shí)代,對(duì)于架構(gòu)和技術(shù)的選擇有很多,而更關(guān)鍵的因素可能得從軟件項(xiàng)目管理方面來(lái)衡量,從所周知,一個(gè)項(xiàng)目采用何種架構(gòu)和細(xì)節(jié)性的技術(shù)只是項(xiàng)目管理的一個(gè)小部分。“而在 J2EE 遭遇失敗的場(chǎng)景中, EJB 通常都扮演著重要的角色”( page 4 ),這樣說(shuō)似乎也顯得很牽強(qiáng)。
書(shū)中再次強(qiáng)調(diào)“最成功的標(biāo)準(zhǔn)都是從實(shí)踐中發(fā)展出來(lái)的” (page 5) ,最顯著的例子莫過(guò)于 OSI 和 TCP/IP 之間的關(guān)系。
本書(shū)的主旋律主要包括以下部分:
1 、簡(jiǎn)單
我常常在工作中就把一些問(wèn)題看得較復(fù)雜,因?yàn)榭傆X(jué)得這不是一件壞事,考慮到一個(gè)問(wèn)題的復(fù)雜性并認(rèn)真想清楚此問(wèn)題的各個(gè)方面,在解決這個(gè)問(wèn)題的時(shí)候相對(duì)來(lái)說(shuō)就會(huì)簡(jiǎn)單一些,但是這樣也確實(shí)會(huì)帶來(lái)諸多問(wèn)題,如軟件成本的核算,我就曾因此在一個(gè)客戶(hù)需求并不高的情況下把問(wèn)題復(fù)雜化了,導(dǎo)致了那個(gè)方案的失敗。上次我就是犯了“提前叫客戶(hù)掏錢(qián)購(gòu)買(mǎi)的復(fù)雜架構(gòu)”( page 6 )這樣的錯(cuò)誤。“這種想法有兩個(gè)問(wèn)題:首先,是否讓系統(tǒng)變得如此復(fù)雜不應(yīng)該由作為架構(gòu)師和開(kāi)發(fā)者的我們來(lái)決定,因?yàn)橘I(mǎi)單的人不是我們;其次,即便系統(tǒng)最終變得如此復(fù)雜,我們又怎么知道一開(kāi)始將它們考慮進(jìn)來(lái)就能節(jié)約成本呢?說(shuō)不定,等到有需求的時(shí)候再修改架構(gòu)還會(huì)更節(jié)約呢。”( page 6 )
書(shū)中主要從技術(shù)層面上討論了這個(gè)問(wèn)題,如數(shù)據(jù)庫(kù)的分布,多種客戶(hù)端等。對(duì)于問(wèn)題的解決我們應(yīng)該更切合實(shí)際一點(diǎn),不要沉溺于一些不切實(shí)際的想象。
“XP 的核心教義之一就是:很多時(shí)候,越是節(jié)約成本,就越能開(kāi)發(fā)出高質(zhì)量的軟件;不要試圖預(yù)先解決所有能想到的問(wèn)題。 ” ( page 6 )
“使 J2EE 項(xiàng)目具備架構(gòu)重構(gòu)能力的關(guān)鍵在于:遵循良好的 OO 設(shè)計(jì)法則, 并且始終針對(duì)接口編程、而非針對(duì)類(lèi)編程;將EJB之類(lèi)的技術(shù)隱藏在普通Java對(duì)象背后。 ”( page 7 )
2 、生產(chǎn)率
雖然我沒(méi)有真正的用 EJB 來(lái)開(kāi)發(fā)過(guò)任何項(xiàng)目,但根據(jù)我對(duì) EJB 的了解來(lái)看, EJB 在生產(chǎn)效率方面確實(shí)存在著很大的問(wèn)題。
3 、 OO
以前我在設(shè)計(jì)一個(gè)對(duì)象的時(shí)候,根本沒(méi)有認(rèn)真的考慮過(guò)某一個(gè)對(duì)象是否真正的合理,這個(gè)需要在以后的設(shè)計(jì)中得以重視。
4 、需求至上
“ J2EE 的開(kāi)發(fā)者們僅僅因?yàn)樗麄兊募夹g(shù)選擇――而不是客戶(hù)的需求――就耗費(fèi)了更多的精力。” (page 8)
5 、經(jīng)驗(yàn)過(guò)程
經(jīng)驗(yàn)對(duì)于一個(gè)軟件開(kāi)發(fā)者來(lái)說(shuō)是極其重要的,很多問(wèn)題只有你在具體的實(shí)施過(guò)程中才會(huì)發(fā)生,但是我從不拿一個(gè)人參加工作的時(shí)間長(zhǎng)短來(lái)衡量一個(gè)人的經(jīng)驗(yàn)是否豐富。
書(shū)中提到的循證醫(yī)學(xué)( EBM )到是一件很有意思的事情,我覺(jué)得值得我們中國(guó)的醫(yī)生好好的學(xué)習(xí)和思考一下(題外話)。
6 、可測(cè)試性
對(duì)于軟件測(cè)試,我其實(shí)并沒(méi)有深入的認(rèn)識(shí),我一直都處在開(kāi)發(fā)的前沿,沒(méi)有更多的機(jī)會(huì)和時(shí)間來(lái)深入研究測(cè)試,其實(shí)軟件測(cè)試是一門(mén)很值得研究的學(xué)問(wèn)。就拿騰訊的程序來(lái)說(shuō),其出錯(cuò)的機(jī)率遠(yuǎn)遠(yuǎn)高于其它軟件,這是人的共知的,我想這也是騰訊所需要重視的。
關(guān)于輕量級(jí)框架和容器,我一直在關(guān)注 Spring 、 PicoContainer 和 Nanning 等。
書(shū)中講到的“帕累托法則( 80/20 法則,或 90/10 法則)”的確可以作為我們?cè)陧?xiàng)目實(shí)施過(guò)程中考慮該如何解決問(wèn)題的一個(gè)衡量標(biāo)準(zhǔn)。即“花比較少的力氣就可以解決大部分的問(wèn)題,而要解決剩下的少部分問(wèn)題則需要多得多的努力。”( page 11 )這教會(huì)了我們?nèi)绾卧陧?xiàng)目中做適當(dāng)?shù)娜∩幔òㄜ浖軜?gòu)的取舍和需求的取舍,當(dāng)然很多時(shí)候需求是不能改變的)。
EJB 在那些真正需要對(duì)象的分布應(yīng)用方面仍是上佳之選,同時(shí)在需要大量使用異步消息的應(yīng)用中,也是不錯(cuò)的選擇,同時(shí), EJB 在金融中間件的應(yīng)用中,也能為項(xiàng)目提供價(jià)值。
本書(shū)所推行的思想就是, EJB 并不是要被我們完全拋棄,只是在一些沒(méi)有必要使用 EJB 的項(xiàng)目中,我們可以如何找到更好,更簡(jiǎn)單,更具生產(chǎn)率的替代方案。
同時(shí)需要澄清的一個(gè)誤解是: EJB 一直被視為 J2EE 平臺(tái)的核心。這種觀點(diǎn)把 EJB 的地位看得太重了一些。
書(shū)中說(shuō)“還有強(qiáng)大的政治因素(而非技術(shù)因素)促使人們使用 EJB ”( page 12 ),對(duì)于此句中的“政治因素”不知所指。是說(shuō)的來(lái)自 Java 官方(即 SUN )的因素嗎?