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

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