自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

軟件架構(gòu)五大模式詳解

開發(fā) 架構(gòu)
本文包含軟件架構(gòu)的重要性、定義及其常見模式,架構(gòu)對系統(tǒng)成功的影響,五種主要的架構(gòu)模式及其最佳應(yīng)用場景,評估優(yōu)秀架構(gòu)的關(guān)鍵質(zhì)量屬性。

一個堅實的軟件架構(gòu)基礎(chǔ),是開發(fā)創(chuàng)新且復(fù)雜的軟件的關(guān)鍵,這些軟件不僅要符合市場需求,還要為用戶解決實際問題。你是否曾參與過一些項目,這些項目在最初的幾輪開發(fā)后似乎就無法繼續(xù)迭代了?這正是軟件架構(gòu)發(fā)揮作用的地方,它的重要性顯而易見。

在軟件行業(yè)中,當(dāng)人們談?wù)摗败浖睍r,他們通常指的是軟件系統(tǒng)內(nèi)部設(shè)計中最關(guān)鍵的部分。然而,這一基礎(chǔ)的構(gòu)建取決于多個因素,如軟件架構(gòu)師與設(shè)計師之間的相互理解、正確的設(shè)計決策以及易于理解的代碼。

什么是軟件架構(gòu)?

從使用智能手機到發(fā)送電子郵件,我們?nèi)粘I钪械脑S多方面都嚴重依賴于我們使用的系統(tǒng)的軟件架構(gòu)。沒有它,我們所使用和了解的許多事物將根本無法實現(xiàn)。軟件架構(gòu)帶來了組織的創(chuàng)新。

定義

軟件架構(gòu)(Software Architecture)的定義長期以來一直存在爭議。對某些人來說,它是基本組件的連接方式,或系統(tǒng)的基礎(chǔ)組織結(jié)構(gòu)。在這方面,伊利諾伊大學(xué)副教授 Ralph Johnson 提出的抽象概念值得注意:

“架構(gòu)是關(guān)于重要的事情,無論那是什么。”

乍一聽,這可能顯得平淡無奇,但它實際上蘊含了豐富的內(nèi)涵。軟件架構(gòu)是指軟件系統(tǒng)的最高級別框架,即系統(tǒng)骨架。它是系統(tǒng)基礎(chǔ)的最初選擇之一,這一選擇會顯著影響工作流程、代碼質(zhì)量、維護、部署和開發(fā)的難易度。

軟件架構(gòu)主要基于一系列與軟件開發(fā)相關(guān)的關(guān)鍵決策。這些決策對最終產(chǎn)品的整體成功和性能有重大影響。這些決策包括:

  • 選擇結(jié)構(gòu)組件及其接口
  • 組件之間的協(xié)作行為
  • 將這些結(jié)構(gòu)和行為組件配置為一個實質(zhì)性的子系統(tǒng)
  • 基于業(yè)務(wù)需求做出架構(gòu)決策

軟件架構(gòu)與軟件系統(tǒng)設(shè)計是否相同?

盡管大多數(shù)人認為軟件架構(gòu)和軟件設(shè)計不同,但從根本上講,它們是一樣的。這一區(qū)別源于軟件系統(tǒng)設(shè)計被認為是低級別的細節(jié),而軟件架構(gòu)是高級別的細節(jié)。

沒有高級別細節(jié)的知識,開發(fā)人員可能仍能處理低級別細節(jié),但反之則不行。系統(tǒng)架構(gòu)師需要完全了解他們的高級決策如何影響低級別的細節(jié)。

此外,軟件設(shè)計是軟件開發(fā)周期(SDLC)的初始階段之一,它為開發(fā)人員提供了詳細的數(shù)據(jù)以實現(xiàn)兼容的軟件。

另一方面,軟件架構(gòu)是一個計劃,約束了軟件系統(tǒng)設(shè)計以避免常見的錯誤。它為組織實現(xiàn)技術(shù)和業(yè)務(wù)戰(zhàn)略。

簡而言之,如何構(gòu)建是軟件設(shè)計,而構(gòu)建什么則是軟件架構(gòu)。

為什么軟件架構(gòu)如此重要?

軟件架構(gòu)是為特定的目標而設(shè)計的——它的全部意義在于識別那些直接關(guān)系到系統(tǒng)成敗的組件,并構(gòu)建一個服務(wù)和保護這些重要組件的系統(tǒng)。一個有組織的系統(tǒng)架構(gòu)設(shè)計有助于保持內(nèi)部質(zhì)量,從而進一步改善軟件。

以 Netflix 為例,它的 微服務(wù)架構(gòu) 使他們能夠管理可用性,而在 Salesforce 或 Google 中,則是 領(lǐng)域驅(qū)動設(shè)計 幫助他們處理 領(lǐng)域邏輯的復(fù)雜性。

讓我們通過以下例子來理解這一點。

假設(shè)有兩個類似的產(chǎn)品在一個月的時間差內(nèi)發(fā)布。三個月后,它們都需要新增功能。

現(xiàn)在有兩種情境。

  1. 發(fā)布——5月31日:代碼混亂且糾結(jié)。用戶對此沒有意見,但追蹤變更范圍并加以整合變得非常困難。
  2. 發(fā)布——6月30日:代碼完美有序。用戶對此也沒有意見,但軟件開發(fā)團隊可以輕松處理并實施變更。

在這種情況下,軟件開發(fā)公司會怎么選擇?

通常,即便代碼混亂,團隊也會選擇提前發(fā)布,因為在當(dāng)時最重要的是盡快上線——越早發(fā)布,越有機會占領(lǐng)市場。

然而,在第二種情境中,由于質(zhì)量性能和代碼質(zhì)量被同等重視,變更需要更多時間,這將不利于市場投放時間。

但一個設(shè)計良好的微服務(wù)架構(gòu)將有助于更輕松地進行維護。這樣不僅能節(jié)省時間,還能通過快速且定期的更新滿足用戶需求。

混亂的代碼可能使產(chǎn)品更早進入市場,但在包含新變更時會要求付出更多代價。相反,有序的代碼可能導(dǎo)致發(fā)布延期,但最終會提供準確且及時的更新。

軟件架構(gòu)模式

在設(shè)計一個在線購物應(yīng)用的軟件開發(fā)項目時,最重要的是定義其編程架構(gòu)和設(shè)計。這些是構(gòu)建應(yīng)用的基礎(chǔ)。例如,產(chǎn)品推薦的算法將如何工作?購物車將如何運作?這一系列問題不斷延伸。

軟件架構(gòu)模式可以被定義為解決主流和重復(fù)出現(xiàn)的軟件工程問題的方案。接下來,我們將介紹五種常見的軟件架構(gòu)模式:

1. 分層架構(gòu)模式

這種模式因其易于開發(fā)和維護的特點而被廣泛使用。它采用分層的方法,將代碼按層次組織。典型的信息系統(tǒng)中,最常見的四個層次為:

  • 表現(xiàn)層或 UI 層
  • 應(yīng)用層或服務(wù)層
  • 業(yè)務(wù)邏輯層或領(lǐng)域?qū)?/li>
  • 數(shù)據(jù)訪問層或持久層

最佳使用場景

  • 需要超過 CRUD 操作的常規(guī)業(yè)務(wù)應(yīng)用
  • 需要快速開發(fā)的標準應(yīng)用
  • 對測試和維護有嚴格標準的應(yīng)用

2. 微內(nèi)核架構(gòu)模式

這種模式適用于需要適應(yīng)不斷變化的系統(tǒng)需求的應(yīng)用。它分為擴展功能(插件Plugins)和最小功能核心。核心系統(tǒng)包括標準的業(yè)務(wù)邏輯,而插件則是獨立的組件,通過自定義代碼為核心系統(tǒng)提供特定的處理功能。

插件由獨立的組件組成,通過自定義代碼提供特定的處理功能來支持核心系統(tǒng)。微內(nèi)核就像一個插座,用于連接這些插件,從而增強其潛力和功能。

最佳使用場景

  • 任務(wù)和作業(yè)調(diào)度應(yīng)用
  • 工作流應(yīng)用
  • 集成來自多個源數(shù)據(jù)并將其傳輸?shù)讲煌康牡氐膽?yīng)用

3. 微服務(wù)架構(gòu)模式

這種模式通過構(gòu)建多個小型且獨立的應(yīng)用來構(gòu)成一個完整的系統(tǒng)。每個應(yīng)用(或微服務(wù))各自負責(zé)不同的任務(wù),彼此之間只需進行通信。

作為單體架構(gòu)模式的可行替代方案,微服務(wù)架構(gòu)已獲得廣泛關(guān)注和重要性。它由多個松散耦合的服務(wù)組成,在使用微服務(wù)時,需要確保它們之間的消息交換保持向后兼容。

最佳使用場景

  • 快速發(fā)展的 Web 和業(yè)務(wù)應(yīng)用
  • 具有明確邊界的企業(yè)數(shù)據(jù)中心
  • 由分布在全球各地的開發(fā)團隊維護的網(wǎng)站

4. 基于事件的架構(gòu)模式

這種模式用于開發(fā)高度可擴展的系統(tǒng),其異步架構(gòu)方式以處理定義的“事件”,如滾動條的移動、按鈕點擊等?;谑录哪J桨瑔我挥猛镜氖录幚碓?,這些元素構(gòu)建了一個中央單元。中央單元接收所有數(shù)據(jù),并將其分配給處理特定類型的獨立模塊。

最佳使用場景

  • 用戶界面
  • 具有異步數(shù)據(jù)流的應(yīng)用
  • 需要無縫數(shù)據(jù)流且最終會擴展的復(fù)雜應(yīng)用

5. 基于空間的架構(gòu)模式

這種模式特別用于解決并發(fā)性和可擴展性問題,消除了中央數(shù)據(jù)庫的約束,并使用復(fù)制的內(nèi)存數(shù)據(jù)網(wǎng)格。

這種模式通過將存儲和處理分布在多個服務(wù)器之間來減少高負載下功能崩潰的風(fēng)險。

最佳使用場景

  • 社交網(wǎng)絡(luò)
  • 高流量數(shù)據(jù)如用戶日志和點擊流
  • 低價值數(shù)據(jù)

如何評估一個好的軟件架構(gòu)?

一個高效的軟件架構(gòu)應(yīng)具有以下質(zhì)量屬性:

  1. 功能性 Functionality:軟件可以提供滿足用戶需求的功能。
  2. 可用性 Usability:軟件使用的便利性。
  3. 可靠性 Reliability:在特定情況下提供所需功能的能力。
  4. 可遷移性/支持性 Supportability:開發(fā)者將軟件遷移到不同平臺的難易度。
  5. 性能 Performance:考慮資源利用、處理速度、響應(yīng)時間、生產(chǎn)力和吞吐量的近似值。
  6. 獨立性 Self-Reliance:即使某些部分出現(xiàn)問題,仍能保持最佳性能的能力。

總結(jié)

綜上所述,軟件架構(gòu)是高效軟件的根基,它有助于在整個生命周期內(nèi)保持產(chǎn)品的質(zhì)量和易于管理。最終,它在長期內(nèi)證明是有利且必要的,因為它更易于修改,節(jié)省了開發(fā)人員的時間和精力。


責(zé)任編輯:華軒 來源: TechLeadCloud
相關(guān)推薦

2020-06-22 07:00:00

軟件架構(gòu)架構(gòu)模式

2022-03-04 14:21:56

區(qū)塊鏈數(shù)據(jù)架構(gòu)

2010-10-08 14:04:10

JavaScript網(wǎng)

2009-10-14 11:19:11

桌面虛擬化模式

2011-09-07 09:21:01

設(shè)計模式

2019-06-04 10:40:07

2011-04-07 14:12:04

Firefox 5.0

2010-09-30 10:06:35

2025-04-27 01:11:11

GolangKafkaSaga

2018-04-26 10:57:44

PHP運行模式

2021-12-31 08:15:59

云原生技術(shù)通信

2010-03-26 14:37:57

Visual Stud

2019-09-16 23:03:12

軟件設(shè)計技術(shù)

2017-12-25 10:34:18

技術(shù)預(yù)測機遇

2009-10-30 09:23:37

Linux辦公軟件OpenOffice

2025-01-10 08:00:00

2012-08-23 09:25:16

IBM軟件峰會

2010-03-31 11:23:20

2011-09-21 09:40:57

軟件項目

2019-12-19 08:00:00

軟件測試AIIoT
點贊
收藏

51CTO技術(shù)棧公眾號