什么是架构
什么是架構(gòu)
本文為《架構(gòu)漫談》系列第一篇。本文將會(huì)從:”什么是架構(gòu)”,“架構(gòu)能解決什么問(wèn)題”,“架構(gòu)和框架的區(qū)別”三個(gè)點(diǎn)來(lái)著重討論,本文系個(gè)人觀點(diǎn),如有不正確的地方,歡迎指正討論。
什么是架構(gòu)?
每當(dāng)我們開發(fā)新的項(xiàng)目的時(shí)候都會(huì)新建一個(gè)解決方案,然后在解決方案中搭建N個(gè)項(xiàng)目。每個(gè)項(xiàng)目之間通過(guò)“引用”達(dá)到交互的功能,這個(gè)過(guò)程就可以稱之架構(gòu),而架構(gòu)最終的產(chǎn)物則是軟件產(chǎn)品。不同的程序員在搭建架構(gòu)的時(shí)候分兩種情況:熟悉業(yè)務(wù),根據(jù)業(yè)務(wù)進(jìn)行架構(gòu)、不熟悉業(yè)務(wù),根據(jù)自己的理解進(jìn)行架構(gòu)。這兩種情況在軟件工程行業(yè)中有兩個(gè)名詞進(jìn)行描述,分別是“隱式架構(gòu)”和“顯式架構(gòu)”。
舉個(gè)例子,讓一個(gè)經(jīng)驗(yàn)豐富的程序員去開發(fā)一個(gè)Blog系統(tǒng),經(jīng)驗(yàn)豐富的程序員的腦中就會(huì)有一個(gè)Blog系統(tǒng)的大體架構(gòu),比如功能等等。。反之,如果讓一個(gè)新手去開發(fā)一個(gè)Blog系統(tǒng),那么他可能因?yàn)椴涣私庑枨蟆⒐δ艿葐?wèn)題需要耽擱很久,所以這時(shí)候就需要我們把架構(gòu)給展現(xiàn)出來(lái),通過(guò)草圖或UML告訴程序員有哪些功能模塊,以及它們之間的關(guān)聯(lián)等等來(lái)幫助程序員開發(fā)。
架構(gòu)不能脫其需實(shí)現(xiàn)的系統(tǒng)而存在。在進(jìn)行軟件架構(gòu)之前,我們需要理解系統(tǒng)是如何和外部環(huán)境發(fā)生關(guān)系的以及如何嵌入到外部環(huán)境中的。架構(gòu)是一個(gè)系統(tǒng)最為核心的部分,是構(gòu)造系統(tǒng)過(guò)程中的支柱。在進(jìn)行系統(tǒng)架構(gòu)前,我們往往需要了解很多方面的東西。例如:分析需求、設(shè)計(jì)系統(tǒng)、根據(jù)其技術(shù)語(yǔ)言的本身來(lái)確保架構(gòu)的可行性。
完美的設(shè)計(jì)不是包羅萬(wàn)向無(wú)所不在,而是完整自洽不可精簡(jiǎn)。
架構(gòu)能解決什么問(wèn)題
這個(gè)問(wèn)題可以用一句話來(lái)回答:架構(gòu)是為了解決系統(tǒng)的復(fù)雜性,也同時(shí)保證了系統(tǒng)的可維護(hù)性。
一旦進(jìn)入開發(fā)階段,在架構(gòu)中我們所定義的一些功能則不能被輕易改變。這里僅僅是指不會(huì)輕易改變而不是不能改變。而一些功能可以會(huì)隨著的業(yè)務(wù)的變更發(fā)生更改,但有了架構(gòu)之后,我們改起來(lái)非常容易。舉個(gè)例子,某公司需要開發(fā)一個(gè)金融系統(tǒng),在開發(fā)系統(tǒng)前沒(méi)有專業(yè)的人員進(jìn)行架構(gòu),招了一些程序員分完工就開始寫功能。這些程序員在寫某一個(gè)功能點(diǎn)時(shí)根本不會(huì)去考慮這個(gè)功能別人有沒(méi)有寫過(guò),直接就開始寫,殊不知他們寫的這個(gè)功能已經(jīng)有幾個(gè)人都寫了。而這時(shí),BOSS說(shuō)某個(gè)功能需要修改,那么這些重復(fù)的"輪子"都要跟著修改,如果某位程序員忘記了修改則會(huì)導(dǎo)致系統(tǒng)的崩潰。再或者,當(dāng)時(shí)寫這個(gè)金融系統(tǒng)的程序員如果全部辭職,公司在招人來(lái)繼續(xù)開發(fā)這個(gè)項(xiàng)目,由于沒(méi)有整體的架構(gòu)圖可能會(huì)導(dǎo)致這個(gè)項(xiàng)目無(wú)法繼續(xù)維護(hù)下去,最終可能導(dǎo)致項(xiàng)目失敗。
架構(gòu)和框架的區(qū)別
很多人都會(huì)把框架和架構(gòu)混為一談,其實(shí)不然。框架是軟件,而架構(gòu)不是軟件。
框架是一種特殊的軟件,它并不能提供完整無(wú)缺的解決方案,而是為你構(gòu)建解決方案提供良好的基礎(chǔ)。框架是半成品。典型地,框架是系統(tǒng)或子系統(tǒng)的半成品;框架中的服務(wù)尅被最終應(yīng)用系統(tǒng)直接調(diào)用,而框架中的擴(kuò)展點(diǎn)是供應(yīng)用開發(fā)人員定制的“可變化點(diǎn)”。
架構(gòu)不是軟件,而是關(guān)于軟件如何設(shè)計(jì)的重要策略。軟件架構(gòu)決策設(shè)計(jì)到如何將軟件系統(tǒng)分解成不同的部分、各部分之間的靜態(tài)結(jié)構(gòu)關(guān)系和動(dòng)態(tài)交互關(guān)系等。經(jīng)過(guò)完整的開發(fā)過(guò)程之后,這些架構(gòu)決策將體現(xiàn)在最終開發(fā)出的軟件系統(tǒng)中;當(dāng)然,引入軟件架構(gòu)之后,整個(gè)開發(fā)過(guò)程變成了“分兩步走”,而架構(gòu)決策往往會(huì)體現(xiàn)在框架之中。或許,人們常把架構(gòu)和框架混為一談的原因就在于此吧!我們不能指著某些代碼,說(shuō)這就是軟件架構(gòu),因?yàn)檐浖軜?gòu)是比具體代碼高一個(gè)抽象層次的概念。架構(gòu)勢(shì)必被代碼所體現(xiàn)和遵循,但任何一段具體的代碼都代表不了架構(gòu)。
框架技術(shù)和架構(gòu)技術(shù)的出現(xiàn),都是為了解決軟件系統(tǒng)日益復(fù)雜所帶來(lái)的困難而采取“分而治之”思維的結(jié)果-----先大局后局部,就出現(xiàn)了架構(gòu);先通用后專用,就出現(xiàn)了框架。下圖很好地揭示了這一點(diǎn)。架構(gòu)是問(wèn)題的抽象解決方案,它關(guān)注大局而忽略細(xì)節(jié);而框架是通用半成品,還必須根據(jù)具體需求進(jìn)一步定制開發(fā)才能變成應(yīng)用系統(tǒng)。
分類:.架構(gòu)漫談
總結(jié)
- 上一篇: why I cannot set SAP
- 下一篇: hammer使用: 代码:捏合、捏开、