软件体系架构模式之一什么是软件架构模式
什么是軟件架構(gòu)模式
計(jì)劃啟動(dòng)未開發(fā)的軟件項(xiàng)目?然后選擇正確的架構(gòu)模式將對(duì)項(xiàng)目的結(jié)果起關(guān)鍵作用。選擇市場上最流行或最新的技術(shù)并不總是意味著會(huì)帶來最好的結(jié)果。但是,選擇最合適的解決方案將為行之有效的問題和反復(fù)出現(xiàn)的問題提供可靠的解決方案。
在軟件工程領(lǐng)域,有一句著名的諺語說:“對(duì)您的簡歷做出決定”。這是什么意思?IT專業(yè)人員喜歡用最新,最先進(jìn)的技術(shù)來裝飾自己的簡歷,這將對(duì)他們的下一次面試有所幫助,但實(shí)際上對(duì)項(xiàng)目沒有好處。例如,如果您的項(xiàng)目是為調(diào)查構(gòu)建常規(guī)的數(shù)據(jù)捕獲表單(不超過10個(gè)字段),并且少于100個(gè)用戶只能使用一次,那么使用微服務(wù)等高度復(fù)雜的架構(gòu)模式將是一場徹底的災(zāi)難。這就像建造一架戰(zhàn)斗機(jī)只是為了逛街盡頭的雜貨店。
選擇架構(gòu)模式時(shí)必須進(jìn)行徹底的計(jì)劃,并且必須考慮以下功能。
成本
上市時(shí)間
用戶數(shù)量(當(dāng)前和將來)
隔離級(jí)別(即:與其他系統(tǒng)/平臺(tái)集成)
如果我們開發(fā)沒有任何架構(gòu)模式的系統(tǒng)會(huì)怎樣?最終將導(dǎo)致一個(gè)“大泥球”,每個(gè)階層都與其他階層相連。
一個(gè)大泥球
因此,只要您更改一個(gè)類的行為或結(jié)構(gòu),就會(huì)在其他多個(gè)類破裂的地方產(chǎn)生漣漪效應(yīng)。您的軟件是這樣的嗎?找出答案的最佳方法是使用軟件設(shè)計(jì)逆向工程工具(如hex-ray)來分析您的組件/類結(jié)構(gòu)。如果最終遇到上圖所示的情況,那么就該重新考慮并對(duì)軟件設(shè)計(jì)進(jìn)行一些更改了。
為了幫助您,我們將瀏覽主要軟件架構(gòu)模式的基礎(chǔ)知識(shí),以及每種模式的優(yōu)缺點(diǎn)。然后,我們將詳細(xì)說明哪種架構(gòu)模式最適合給定場景。但是我們需要牢記一件事。在軟件體系結(jié)構(gòu)方面,沒有黑白答案。不存在正確或錯(cuò)誤的體系結(jié)構(gòu)。它是非常主觀的,并且取決于前面提到的多種因素。
?
什么是軟件架構(gòu)模式?
創(chuàng)建軟件系統(tǒng)基本結(jié)構(gòu)的原則稱為軟件體系結(jié)構(gòu)。軟件結(jié)構(gòu)由軟件元素及其相互關(guān)系組成,這些元素起著藍(lán)圖的作用,規(guī)劃了要執(zhí)行的任務(wù)的模式。軟件設(shè)計(jì)團(tuán)隊(duì)極大地依賴于這些軟件架構(gòu)模式。應(yīng)當(dāng)指出,必須明智地選擇軟件體系結(jié)構(gòu),因?yàn)橐坏?shí)施,就不容易更改。
軟件架構(gòu)模式很重要,因?yàn)樗鼈兪窃诩軜?gòu)設(shè)計(jì)中成功構(gòu)建和測試的最佳解決方案的示例。有經(jīng)驗(yàn)的開發(fā)人員會(huì)使用他們的知識(shí)和熟悉程度來包含這些模式,而不是在設(shè)計(jì)時(shí)人為或隨機(jī)創(chuàng)建模式。此外,通過使用這些模式并突出顯示它們,他們可以共享知識(shí)并教會(huì)新開發(fā)人員關(guān)鍵的設(shè)計(jì)策略。
軟件架構(gòu)模式的好處
模式有助于識(shí)別和指定抽象,這些抽象位于單個(gè)對(duì)象,類和組件的級(jí)別之上。單個(gè)應(yīng)用程序本身很難解決一個(gè)復(fù)雜的問題。模式引入了具有多個(gè)應(yīng)用程序組件的不同角色,從而有助于提供解決方案。他們定義了組成部分,以及他們?cè)趨f(xié)作方式方面的職責(zé)和關(guān)系。
此外,這些解決方案描繪了所介紹角色之間的關(guān)系。例如,觀察者模式包括兩個(gè)主要角色,即主題和觀察者。這兩個(gè)角色通過基于推送的更改傳播機(jī)制進(jìn)行協(xié)作,該機(jī)制確保組件可以保持彼此一致的狀態(tài)。
模式提供了一種通用語言和對(duì)設(shè)計(jì)概念的共同理解。即使某些算法,接口,實(shí)現(xiàn)和詳細(xì)設(shè)計(jì)的重用并非總是可能的,這有助于簡化架構(gòu)知識(shí)和偽像的重用。例如,當(dāng)開發(fā)人員了解Observer模式時(shí),無需討論如何管理其系統(tǒng)中一致的兩個(gè)協(xié)作組件。
模式有助于記錄軟件體系結(jié)構(gòu)。通過對(duì)后果和實(shí)現(xiàn)折衷的深入評(píng)估,模式可以追蹤選擇特定設(shè)計(jì)選擇而不是其他選擇的原因。通過記錄軟件的意圖,行為和結(jié)構(gòu),可以發(fā)現(xiàn)其中的模式,從而使軟件開發(fā)路徑,實(shí)踐和維護(hù)變得更加順暢。產(chǎn)品線架構(gòu)使用有益的模式,因此開發(fā)人員應(yīng)該意識(shí)到這一點(diǎn)。如果沒有,他們將在不了解基本結(jié)構(gòu),機(jī)制和控制流程的情況下,難以正確使用它。基于模式的體系結(jié)構(gòu)文檔通過幫助開發(fā)人員專注于主要設(shè)計(jì)決策來幫助解決沖突。
模式在具有明確定義的過程的軟件構(gòu)建中很有用。一些模式勾勒出特定的行為。這為滿足特定領(lǐng)域中的應(yīng)用程序的某些功能要求鋪平了道路。例如,已記錄了會(huì)計(jì)系統(tǒng)和公司財(cái)務(wù)以及提高響應(yīng)系統(tǒng)容量的模式。
模式還可以以一種形式來捕獲經(jīng)驗(yàn),這種形式可以獨(dú)立于特定的項(xiàng)目細(xì)節(jié)和約束,實(shí)現(xiàn)范例甚至通常是編程語言。在理解編碼原則并解決新項(xiàng)目中的設(shè)計(jì)挑戰(zhàn)時(shí),開發(fā)人員可以實(shí)施容易出錯(cuò),效率低下或無法維護(hù)的解決方案。模式可幫助開發(fā)人員選擇合適的軟件體系結(jié)構(gòu),而不會(huì)陷入域中的潛在陷阱。
模式可以幫助來自不同編程語言文化的軟件開發(fā)人員共享共同感興趣的設(shè)計(jì)見解,同時(shí)還可以防止“語言大戰(zhàn)”。在不同世代的開發(fā)人員之間進(jìn)行知識(shí)轉(zhuǎn)移有助于平衡并使各個(gè)社區(qū)的成員能夠交流并重新關(guān)注特定語言社區(qū)的關(guān)注。盡管編碼可能不同,但是可能會(huì)出現(xiàn)類似的模式,這些模式將支持新舊模式。
體系結(jié)構(gòu)模式不是編碼準(zhǔn)則
必須注意,模式不能視為編碼準(zhǔn)則。可以將編碼準(zhǔn)則部分或從著重于代碼樣式的模式中放在一起。但是,事實(shí)并非如此。盡管有許多慣用的編碼準(zhǔn)則,但這不會(huì)自動(dòng)使它們成為設(shè)計(jì)模式。例如,Sun Microsystem的JavaBeans規(guī)范一直將屬性訪問器的get和set前綴用作“設(shè)計(jì)模式”。但是,盡管這些前綴大多數(shù)都是模式,但即使在Java代碼中,它們也無助于解決一般設(shè)計(jì)的設(shè)計(jì)問題。
建筑圖案的應(yīng)用
清楚地理解模式詞匯總是很重要的,因?yàn)閼?yīng)用錯(cuò)誤的模式會(huì)導(dǎo)致很多問題。有經(jīng)驗(yàn)的開發(fā)人員將具有合理的判斷力,這將有助于他理解在特定情況下何時(shí)不適合使用某種模式。如果應(yīng)用不當(dāng),可能會(huì)導(dǎo)致不合適的設(shè)計(jì)和實(shí)現(xiàn)。
對(duì)模式有淺淺的了解可以給開發(fā)人員一種印象,即他們可能精通該模式,即使有更好的解決方案。一個(gè)很好的例子是了解復(fù)雜模式(例如Proactor和Reflection)的結(jié)構(gòu)和參與者。這些知識(shí)僅僅是一個(gè)方面,因此還不夠。對(duì)于有效的模式應(yīng)用,重要的是模式的本質(zhì)必須反映在其上下文中,而不僅僅是結(jié)構(gòu)中。
?
原文:https://medium.com/@priyalwalpita
總結(jié)
以上是生活随笔為你收集整理的软件体系架构模式之一什么是软件架构模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于丧尸电影
- 下一篇: 软件体系架构模式之二分层体系结构