原則#1:存在的原因
軟件系統(tǒng)存在的原因:為用戶提供價(jià)值。所有的決定都應(yīng)該考慮到這一點(diǎn)。在指定系統(tǒng)需求之前,在關(guān)注系統(tǒng)的各個(gè)功能之前,在確定硬件平臺(tái)或開發(fā)過程之前,問問自己以下問題:這是否能為系統(tǒng)真正增加價(jià)值?如果答案是否定的,那就不要去做。所有其他原則都以這一條為先。
原則#2:KISS
軟件設(shè)計(jì)不是一個(gè)偶然的過程。任何設(shè)計(jì)工作都需要考慮許多因素。所有的設(shè)計(jì)應(yīng)該盡可能簡(jiǎn)單,但不要過于簡(jiǎn)化。
復(fù)雜性是你的敵人。任何傻瓜都能讓事情變得復(fù)雜。反之則很難。
——Richard Branson
這有利于擁有更易于理解和易于維護(hù)的系統(tǒng)。但并不是說應(yīng)該以簡(jiǎn)單的名義拋棄功能,甚至是內(nèi)部功能。當(dāng)然,通常而言,更優(yōu)雅往往意味著更簡(jiǎn)單。
簡(jiǎn)單是終極的復(fù)雜。
——Leonardo Da Vinci
簡(jiǎn)單也并不意味著快速和骯臟。事實(shí)上,為了簡(jiǎn)化,我們經(jīng)常需要大量思考和多次迭代工作。收獲是更易于維護(hù)且不易出錯(cuò)的軟件。
這一直是我的一個(gè)座右銘——集中和簡(jiǎn)單。簡(jiǎn)單或許會(huì)比復(fù)雜更難;你必須花很多力氣使自己的思維變得簡(jiǎn)單、有條理。
——Steve Jobs
原則#3:維護(hù)愿景
明晰的愿景對(duì)于軟件項(xiàng)目的成功至關(guān)重要。否則,項(xiàng)目最終基本上都將陷入左右搖擺的境地。沒有概念的完整性,系統(tǒng)就很有可能成為不兼容設(shè)計(jì)的拼湊物——被錯(cuò)誤的螺絲釘連接在一起。
概念完整性是系統(tǒng)設(shè)計(jì)中要考慮的最重要因素。
——Fred Brooks
建立一個(gè)干凈的內(nèi)部結(jié)構(gòu)對(duì)構(gòu)建一個(gè)易于理解、可擴(kuò)展和重組、并且可維護(hù)和可測(cè)試的系統(tǒng)而言至關(guān)重要。
——Stroustrup
只有清晰認(rèn)識(shí)系統(tǒng)架構(gòu),才有可能發(fā)現(xiàn)常見的抽象和機(jī)制。利用這種通用性最終將使得系統(tǒng)更簡(jiǎn)單,因此也會(huì)更輕巧、更可靠。
- Grady Booch
妥協(xié)軟件系統(tǒng)的架構(gòu)愿景會(huì)削弱并將最終破壞系統(tǒng),甚至是設(shè)計(jì)得盡善盡美的系統(tǒng)。擁有一個(gè)能夠?qū)崿F(xiàn)愿景和執(zhí)行合規(guī)性的授權(quán)架構(gòu)師有助于確保軟件項(xiàng)目的成功。
原則#4:生產(chǎn)其他人消費(fèi)的東西
很少有工業(yè)級(jí)的軟件系統(tǒng)是在真空中構(gòu)建和使用的。其他人將以某種方式,或者其他依賴于能夠理解系統(tǒng)的方式使用、維護(hù)、記錄。因此,始終指定、設(shè)計(jì),以及實(shí)現(xiàn)了解他人將有助于了解你在做什么。任何軟件開發(fā)產(chǎn)品的受眾都可能很大。
指定用戶。設(shè)計(jì),牢記實(shí)施者。關(guān)注那些必須維護(hù)和擴(kuò)展系統(tǒng)的代碼。有的人可能需要調(diào)試你編寫的代碼,這使得他們成為你的代碼用戶。方便他們工作可以為你的系統(tǒng)增添價(jià)值。
原則#5:面向未來
壽命較長(zhǎng)的系統(tǒng)具有更大的價(jià)值。在今天的計(jì)算環(huán)境中,當(dāng)規(guī)格在剎那間發(fā)生變化并且硬件平臺(tái)過幾個(gè)月就變得過時(shí)時(shí),軟件壽命常常用月來衡量而不是用年。然而,真正的工業(yè)級(jí)軟件系統(tǒng)必須能堅(jiān)持更長(zhǎng)時(shí)間。要做到這一點(diǎn),系統(tǒng)必須能夠適應(yīng)這些改變??梢猿晒?shí)現(xiàn)這些目標(biāo)的系統(tǒng)都是從一開始就以這種方式而設(shè)計(jì)的。切勿在設(shè)計(jì)時(shí)自找麻煩??偸菃枴凹偈惯@樣,那會(huì)怎么樣”,并通過創(chuàng)建解決一般問題,而非僅僅是具體問題的系統(tǒng)來準(zhǔn)備好所有可能的答案。這很可能促使整個(gè)系統(tǒng)的重用。
濫用這個(gè)原則是我看到很多開發(fā)者出錯(cuò)的地方。擁有多年的經(jīng)驗(yàn)和其中許多人致力于單個(gè)項(xiàng)目的好處之一是你可以了解YouArentGonnaNeedIt的優(yōu)點(diǎn)。作為開發(fā)者,除非我們也是該領(lǐng)域?qū)<?,否則我們經(jīng)常會(huì)猜錯(cuò)系統(tǒng)將如何改變。
系統(tǒng)確實(shí)發(fā)生了變化,但通常會(huì)殊途同歸,因而廣義的解決方案就變成了包袱。
——Sal Mangano
原則#6:預(yù)先規(guī)劃重用
重用可節(jié)省時(shí)間和精力。實(shí)現(xiàn)高水平的重用可以說是開發(fā)軟件系統(tǒng)最難的目標(biāo)。代碼和設(shè)計(jì)的重用已被宣稱為使用面向?qū)ο蠹夹g(shù)的主要優(yōu)勢(shì)。但是,這項(xiàng)投資的回報(bào)并不是自動(dòng)的。為了利用面向?qū)ο缶幊烫峁┑闹赜每赡苄裕覀冃枰A(yù)先考慮和規(guī)劃。在系統(tǒng)開發(fā)過程的每個(gè)級(jí)別都有很多技術(shù)可以用來實(shí)現(xiàn)重用。詳細(xì)設(shè)計(jì)和代碼級(jí)別的重用技術(shù)不但眾所周知而且是有文檔的。
新的文獻(xiàn)正在以軟件模式的形式尋覓設(shè)計(jì)的重用。然而,這只是戰(zhàn)斗的一部分。與組織中的其他人交流重用的機(jī)會(huì)至關(guān)重要。如何重用你不知道的東西?提前規(guī)劃重用可降低成本并提高可重用組件及其所在系統(tǒng)的價(jià)值。
原則#7:三思而后行!
這最后一條原則可能是最容易被忽視的。在行動(dòng)之前形成一條清晰和完整的思路幾乎總能夠產(chǎn)出更好的結(jié)果。只有你考慮到了某個(gè)問題,你才更有可能解決它。你還可以從中獲得有關(guān)如何再次正確做這件事的知識(shí)。
如果你確實(shí)考慮到了某件事情,但仍然做錯(cuò)了,那么這就是你寶貴的經(jīng)驗(yàn)。思考還有一個(gè)成果是可以學(xué)習(xí)到當(dāng)你不知道某個(gè)東西,此時(shí)該如何研究答案的過程。
明確的思想進(jìn)入到系統(tǒng),就會(huì)產(chǎn)出價(jià)值。應(yīng)用前六個(gè)原則需要深入的思考,當(dāng)然潛在的回報(bào)也是不可估量。