本質(zhì)性困難的原因:必須去面對(duì)復(fù)雜、無(wú)序的現(xiàn)實(shí)世界;精確而完整地識(shí)別出各種依賴(lài)關(guān)系與例外情況;設(shè)計(jì)出完全正確而不是大致正確的解決方案等。想清楚的認(rèn)清現(xiàn)實(shí)世界到底如何運(yùn)作仍有很多挑戰(zhàn),當(dāng)軟件要解決更大規(guī)模的現(xiàn)實(shí)問(wèn)題的時(shí)候,現(xiàn)實(shí)的實(shí)體之間的交互行為就變得更為復(fù)雜,這些轉(zhuǎn)而又增加軟件解決方案的本質(zhì)性困難。
作為軟件開(kāi)發(fā)人員,我們不應(yīng)該試著在同一時(shí)間把整個(gè)程序都塞進(jìn)自己的大腦,而應(yīng)該試著以某種方式去組織程序,以便能夠在一個(gè)時(shí)刻可以專(zhuān)注于一個(gè)特定的部分。這么做的目的是盡量減少在任一時(shí)間所要考慮的程序量。
在軟件架構(gòu)的層次上,可以通過(guò)把整個(gè)系統(tǒng)分解為多個(gè)子系統(tǒng)來(lái)降低問(wèn)題的復(fù)雜度。所有軟件設(shè)計(jì)技術(shù)的目標(biāo)都是把復(fù)雜問(wèn)題分解為簡(jiǎn)單的部分。子系統(tǒng)之間的相互依賴(lài)越少,你就越容易在同一時(shí)間里關(guān)注問(wèn)題的一小部分。
(2)理想的設(shè)計(jì)特征
最小復(fù)雜度
易于維護(hù):意味著在設(shè)計(jì)時(shí)為做維護(hù)工作的程序員著想。
松散耦合:意味著在設(shè)計(jì)時(shí)為讓程序的各個(gè)組成部分之間關(guān)聯(lián)最小。
可擴(kuò)展性:能增強(qiáng)系統(tǒng)的功能而無(wú)須破壞其底層結(jié)構(gòu)。
可重用性:設(shè)計(jì)的系統(tǒng)的組成部分能在其他系統(tǒng)中復(fù)用。
高扇入:大量的類(lèi)試用某個(gè)特定的類(lèi)。
低扇出:讓一個(gè)類(lèi)少量或者始終的使用其他的類(lèi)。
可移植性:可以很方便的移植到其他環(huán)境中。
精簡(jiǎn)性:設(shè)計(jì)出的系統(tǒng)沒(méi)有多余的部分。伏爾泰曾說(shuō):一本書(shū)的完成,不在他不能再加入任何內(nèi)容的時(shí)候,而在不能再刪去任何內(nèi)容的時(shí)候。
層次性:盡量保持系統(tǒng)各個(gè)分階層的層次性,使你可以在任何層面上觀察系統(tǒng),并得到某種具有一致的看法。設(shè)計(jì)出來(lái)的系統(tǒng)應(yīng)該能在任意層次上觀察而不需要進(jìn)入其他層次。
標(biāo)準(zhǔn)技術(shù):盡量使用標(biāo)準(zhǔn)化的、常用的方法,讓整個(gè)系統(tǒng)給人一種熟悉的感覺(jué)。
(3)設(shè)計(jì)的層次