熟悉我的工作的讀者或許會(huì)想,為什么搞J2EE軟件體系結(jié)構(gòu)的專家竟會(huì)為論述軟件配置管理(Software Configuration Management,SCM)的書作序。畢竟,這兩門學(xué)科不能再分開了,難道不是嗎?J2EE體系結(jié)構(gòu)似乎高高在上,而SCM也許被視為在軟件開發(fā)中地位低下。實(shí)際上,沒有什么比這更背離事實(shí)真相了。多年來,我常常發(fā)現(xiàn),那些在J2EE應(yīng)用體系結(jié)構(gòu)上遇到問題的顧客,通常在SCM上也遇到了嚴(yán)重的問題。這種離奇的巧合,有兩層原因。首先,許多人通常很難迅速適應(yīng)變化:例如放棄一套不再適用于像J2EE這樣的新環(huán)境的體系結(jié)構(gòu)實(shí)踐,或者放棄在一種環(huán)境行之有效,但未必在所有的環(huán)境都行之有效的軟件開發(fā)過程。這樣,他們就會(huì)以為,如果他們的SCM過程對前一個(gè)項(xiàng)目行之有效,就一定對當(dāng)前的項(xiàng)目也行之有效:而不顧設(shè)計(jì)與構(gòu)造這兩個(gè)項(xiàng)目所使用的技術(shù)、時(shí)間框架(timescale)與方法也許完全不同的事實(shí)。其次,人們往往想靠一小組簡單的規(guī)則支配他們的全部行動(dòng)。然而,采取過于簡單的方法通常會(huì)在抽象與現(xiàn)實(shí)交會(huì)的地方遇到問題。無論問題是理解為什么特定的J2EE構(gòu)造(例如Entity EJB)在一種情況下行之有效,而在另一種情況下卻不行;還是理解為什么讓開發(fā)者有自己的,能在其中進(jìn)行開發(fā)與集成的私用工作區(qū)是重要的(畢竟,你遲早得把他們的代碼加以集成),問題都是一樣的。在這兩種情況下,簡單的規(guī)則(使用Entity Bean;使用構(gòu)造腳本)的確是好建議,但它必須在經(jīng)驗(yàn)的熔爐中經(jīng)受鍛煉,因?yàn)樵谖唇?jīng)鍛煉之前,它太脆弱,無法應(yīng)用。通過最近20年關(guān)于混沌和復(fù)雜性理論的研究,數(shù)學(xué)家與科學(xué)家們開始發(fā)現(xiàn),雖然根據(jù)太少的和過于簡單的規(guī)則構(gòu)造的系統(tǒng)通常遲鈍而單調(diào),但只要增加很少幾個(gè)規(guī)則,便常??梢缘玫襟@人的復(fù)雜與美妙的系統(tǒng)。這些系統(tǒng)即使受到外力的嚴(yán)重?cái)_亂,仍能自行重組,使總體構(gòu)架保持完整。你手里的這本書就提供一組具有這種柔韌性的SCM規(guī)則。Steve和Brad提出了把SCM作為模式系統(tǒng)對待的成熟建議。正如他們早些時(shí)候有力地揭示的,模式系統(tǒng)的實(shí)力不在于各個(gè)模式本身,而在于模式之間的關(guān)系網(wǎng)。作者開發(fā)出模式的連鎖網(wǎng)絡(luò),覆蓋了最常見的SCM實(shí)踐。然而,更重要的是,他們說明,SCM面臨的問題不是任何一個(gè)模式可以獨(dú)自完全解決的:你需要仔細(xì)地考慮各個(gè)SCM實(shí)踐與其他實(shí)踐的聯(lián)系,以免作繭自縛。例如,你也許想提前看一下他們在第一個(gè)模式:"主線"(第4章)中給出的絕妙建議。這個(gè)貌似平凡的建議(開發(fā)者應(yīng)在單一、穩(wěn)定的碼基上工作)正是我發(fā)現(xiàn)被許多組織:包括那些在實(shí)現(xiàn)過程中已經(jīng)花費(fèi)了數(shù)百萬美元的大型的、成功的公司:在某種程度上忽略了的東西。這是常識,非常實(shí)用的常識,而這正是它的難得之處。同樣,在"私用工作區(qū)"(第6章)和"私用系統(tǒng)構(gòu)造"(第8章)中給出的建議,簡直和使得現(xiàn)代的Java集成開發(fā)環(huán)境(例如VisualAge for Java和IBM的WebSphere Studio)如此有用和如此流行的兩個(gè)關(guān)鍵思想一模一樣。當(dāng)有人問我(差不多每天有人問),為什么開發(fā)者應(yīng)當(dāng)選擇這樣的集成開發(fā)環(huán)境,而不是用傳統(tǒng)的代碼編輯程序和編譯程序在命令行進(jìn)行開發(fā)時(shí),這些工具不僅允許而且積極鼓勵(lì)這種開發(fā)風(fēng)格的事實(shí),是使我能夠用簡單的措詞表達(dá)我的建議的關(guān)鍵因素。所以,我相信,你會(huì)像我一樣發(fā)現(xiàn)本書有用,有啟發(fā)。自從幾年前,這些模式首次在程序模式語言(Pattern Languages of Programs,PLoP)會(huì)議上發(fā)表以來,我已經(jīng)向人們介紹過本書的一些模式,而且我發(fā)現(xiàn),它們對構(gòu)筑坦誠的、有建設(shè)性的、關(guān)于如何以正確的方式實(shí)施SCM的論壇是無價(jià)之寶。這些模式已經(jīng)在解決需要靠技巧與智謀來慎重處理的對顧客的承諾時(shí),成為我劈開復(fù)雜的SCM問題的戈?duì)柕辖Y(jié)的利劍:我希望,你也能很快開始揮舞這把利劍。:Kyle Brown《Enterprise Java Programming with IBM WebSphere》的作者