軟件體系結(jié)構(gòu)之所以可以獨(dú)立于軟件的數(shù)據(jù)結(jié)構(gòu)和軟件的算法,是因?yàn)闃I(yè)界把軟件的數(shù)據(jù)結(jié)構(gòu)和算法看做了燒磚的方法,或設(shè)計(jì)庭院的思想。但沒有擴(kuò)展到整個(gè)軟件系統(tǒng)。一個(gè)軟件系統(tǒng)是龐雜的。但是分治之后的東西仍然用到了最基本的軟件算法和數(shù)據(jù)結(jié)構(gòu)思想。之所以也有些人說SA可以不用,是因?yàn)樗惴ê蛿?shù)據(jù)結(jié)構(gòu)的擴(kuò)張有代替現(xiàn)在的SA的可能。
完美的構(gòu)件是可以進(jìn)行黑箱復(fù)用的。不太完美的復(fù)用構(gòu)件就是白盒復(fù)用,要在原來代碼的基礎(chǔ)上做些必要的改動(dòng)。軟件工程的思想正是體現(xiàn)在軟件流程、軟件模塊和軟件文檔的復(fù)用之上。否則也就沒有工程的說法。但是又有人提出軟件體系結(jié)構(gòu)復(fù)用的思想。這應(yīng)該被認(rèn)為是迄今為止最大粒度的復(fù)用。
如果建筑師可以把自己以前的建筑藍(lán)圖拿來稍作修改就可以進(jìn)行多次施工,那么軟件架構(gòu)師們?yōu)槭裁床荒苣眠^去的系統(tǒng)設(shè)計(jì)方案稍作修改并實(shí)施到新的項(xiàng)目中去?但是很可惜,沒有一個(gè)企業(yè)的業(yè)務(wù)流程和另一個(gè)企業(yè)是完全相同的。所以軟件體系結(jié)構(gòu)的復(fù)用起來比建筑藍(lán)圖的復(fù)用要復(fù)雜的多。
軟件體系結(jié)構(gòu)直接決定了軟件系統(tǒng)的運(yùn)行框架,其優(yōu)劣不但決定了軟件系統(tǒng)是否可以滿足針對(duì)此軟件的功能需求,而且還決定了這些功能需求是否能被合理、高效地實(shí)現(xiàn),即也決定了軟件系統(tǒng)基本的非功能屬性。
[1]、每個(gè)用戶的非功能屬性多多少少的有所不同,也就決定著軟件體系結(jié)構(gòu)的復(fù)用的復(fù)雜性。
軟件體系結(jié)構(gòu)是描述軟件單元(element)、軟件單元的屬性(property)以及這些單元之間關(guān)系(relationship)的結(jié)構(gòu)
、這里的軟件單元應(yīng)該就是構(gòu)件。
軟件體系結(jié)構(gòu)是構(gòu)建計(jì)算機(jī)軟件實(shí)踐的基礎(chǔ),與建筑師設(shè)定建筑項(xiàng)目的設(shè)計(jì)原則和目標(biāo),作為繪圖員畫圖的基礎(chǔ)一樣。沒有藍(lán)圖就不能構(gòu)建出雄偉的大廈。沒有好的體系結(jié)構(gòu)也就不能構(gòu)造出龐大的系統(tǒng)。但是對(duì)于小型的系統(tǒng),體系結(jié)構(gòu)的思想似乎是一種多余。對(duì)于大廈,我們應(yīng)該有建筑藍(lán)圖,但是對(duì)于建造小茅屋,似乎再畫草圖就是一種多余。軟件體系結(jié)構(gòu)表示了一個(gè)軟件系統(tǒng)的高層結(jié)構(gòu),主要特點(diǎn)有
◆ 軟件體系結(jié)構(gòu)是一個(gè)高層次上的抽象,它并不涉及具體的系統(tǒng)結(jié)構(gòu)(比如B/S還是C/S),也不關(guān)心具體的實(shí)現(xiàn)。
◆ 軟件體系結(jié)構(gòu)必須支持系統(tǒng)所要求的功能,在設(shè)計(jì)軟件體系結(jié)構(gòu)的時(shí)候,必須考慮系統(tǒng)的動(dòng)態(tài)行為。
◆ 在設(shè)計(jì)軟件體系結(jié)構(gòu)的時(shí)候,必須考慮有現(xiàn)有系統(tǒng)的兼容性、安全性和可靠性。同時(shí)還要考慮系統(tǒng)以后的擴(kuò)展性和伸縮性。所以有時(shí)候必須在多個(gè)不同方向的目標(biāo)中進(jìn)行決策。
、抽象的東西之所以對(duì)我們有指導(dǎo)的意義。是因?yàn)槲覀兛梢赃\(yùn)用這個(gè)抽象的東西對(duì)具體問題做具體分析。法無定法,也就是這個(gè)道理。