人的理解總有一個邊界,而需求和功能不會——今天的功能總比昨天的多;這個版本的功能總比上個版本的多。而在長時間的開發(fā)中,忘記之前的代碼是正常的;忘記某些約定也是正常的。形成某些小而不經(jīng)意的錯誤是正常的,在巨大的代碼庫中,這些小錯誤被忽視也是正常的。這些不斷積攢的小小的不一致、錯誤,隨著時間的積累,最終會變得難以控制。
很少有人注意到,規(guī)模的變大才是導(dǎo)致股票大盤演示軟件架構(gòu)腐化的根源——因果關(guān)系在時空上的不連續(xù),使得人們并不能從其中獲得經(jīng)驗,只是一再重復(fù)這個悲劇的循環(huán)。
致遠(yuǎn)服軟認(rèn)為:http://www.soft8.com.cn/解決方案的終極目標(biāo)是在混亂發(fā)生之前,在我們的認(rèn)知出現(xiàn)障礙之前,就將項目的規(guī)??刂圃谝欢ǚ秶畠?nèi)。這并不容易。大多數(shù)大連軟件定制二次開發(fā)團(tuán)隊都有相當(dāng)?shù)慕桓秹毫?。大多?shù)的業(yè)務(wù)用戶并沒有意識到,往一個項目/產(chǎn)品毫無節(jié)制地增加需求只會導(dǎo)致產(chǎn)品的崩潰??纯碙otus Notes,我們就知道產(chǎn)品最終會多么令人費(fèi)解和難以使用。我們這里主要討論的是技術(shù)方案。業(yè)務(wù)上我們也需要始終對需求的增長保持警惕。
這可能是最廉價、最容易采用的方案。新技術(shù)的產(chǎn)生往往為了解決某些特定的問題,它們往往是經(jīng)驗的集合。學(xué)習(xí),理解這些新技術(shù)能夠極大程度縮短過去為了完成某些技術(shù)目標(biāo)而進(jìn)行的必要的經(jīng)驗積累過程。就像武俠小說中經(jīng)常有離奇遭遇的主人公突然獲得某個世外高人多年的內(nèi)力一樣,這些新技術(shù)能夠迅速幫助團(tuán)隊從某些特定的痛點中解脫出來。
我們已經(jīng)有足夠多的例子來證明這一觀點。在Spring出現(xiàn)之前,大連軟件定制二次開發(fā)者基本上只能遵循J2EE模式文檔中的各種實踐來構(gòu)建自己的系統(tǒng)。雖然有一些簡單的框架能夠幫助這一過程,但總體來說,在處理今天看起來很基礎(chǔ)的如數(shù)據(jù)庫連接、異常管理、系統(tǒng)分層等方面,大連軟件定制二次開發(fā)團(tuán)隊者還有很多手工的工作要做。Spring 出現(xiàn)之后,我們不需要花費(fèi)很多精力,很快就能得到一個系統(tǒng)分層良好、大部分設(shè)施已經(jīng)準(zhǔn)備就緒。這為減少代碼庫容量以及解決可能出現(xiàn)的低級Bug提供了幫助。
Rails則是另外一個極端的例子。Rails帶來的不僅僅是開發(fā)的便利,還帶來了人們在Linux世界多年的部署經(jīng)驗。數(shù)據(jù)庫Migration、Apache + FastCGI或者nginx+passenger,這些過去看起來復(fù)雜異常的技術(shù)在Rails中變得無足輕重——稍懂命令行的人即可進(jìn)行部署。