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

架構(gòu)設(shè)計(jì),讓人崩潰……

開發(fā) 架構(gòu) 開發(fā)工具
本文主要從架構(gòu)設(shè)計(jì)的本質(zhì)、架構(gòu)設(shè)計(jì)原則、架構(gòu)設(shè)計(jì)方法論三個(gè)方面來進(jìn)行闡述架構(gòu)的設(shè)計(jì)之道。

[[431666]]

圖片來自 包圖網(wǎng)

架構(gòu)設(shè)計(jì)除了掌握技術(shù)框架、技術(shù)組件、技術(shù)原理性知識(shí)外,也需要系統(tǒng)性掌握架構(gòu)基礎(chǔ)知識(shí),以架構(gòu)設(shè)計(jì)原則為指導(dǎo),掌握架構(gòu)設(shè)計(jì)方法論,通過不斷的優(yōu)化和迭代,來實(shí)現(xiàn)更優(yōu)秀的架構(gòu)設(shè)計(jì)。

架構(gòu)設(shè)計(jì)的本質(zhì)

在了解架構(gòu)本質(zhì)之前先了解下架構(gòu)的定義,百度百科對(duì)架構(gòu)的定義:架構(gòu)又名軟件架構(gòu),是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)。

從定義中我們提煉出如下幾個(gè)關(guān)鍵字:

  • 組件:也可以稱為軟件元素或者是架構(gòu)要素。可以是子系統(tǒng)、模塊、應(yīng)用服務(wù),取決于不同粒度來看待。
  • 結(jié)構(gòu):是架構(gòu)之后的產(chǎn)出物,不同的軟件系統(tǒng)會(huì)有不同結(jié)構(gòu),這些結(jié)構(gòu)為解決不同場(chǎng)景而設(shè)計(jì)。
  • 關(guān)系:實(shí)現(xiàn)架構(gòu)組件之間的連接。連接關(guān)系可以是 JVM 內(nèi)部調(diào)用、可以是組件之間、可以是跨應(yīng)用的分布式調(diào)用、也可以是與外系統(tǒng)接口集成調(diào)用。

架構(gòu)是將軟件組件按照一定結(jié)構(gòu)連接起來的 ,軟件組件怎么來找、用什么結(jié)構(gòu)來連接、如何來連接,這些都是軟件復(fù)雜度所帶來的問題。

架構(gòu)設(shè)計(jì)本質(zhì)就是解決軟件復(fù)雜度帶來的問題,軟件復(fù)雜度表現(xiàn)形式有很多種,比如業(yè)務(wù)復(fù)雜度、性能復(fù)雜度、可用性復(fù)雜度、可擴(kuò)展性復(fù)雜度、安全復(fù)雜度等。

任何一個(gè)系統(tǒng)都有它側(cè)重解決的復(fù)雜度問題,理解每個(gè)架構(gòu)方案背后需要真正解決的是軟件復(fù)雜度的什么問題,是評(píng)判一個(gè)架構(gòu)設(shè)計(jì)目的性的關(guān)鍵因素,這也是做架構(gòu)設(shè)計(jì)中常提的系統(tǒng)約束條件。

業(yè)務(wù)復(fù)雜度體現(xiàn)的是如何來拆解業(yè)務(wù),找到合適的軟件元素和組件,按合適結(jié)構(gòu)進(jìn)行連接;性能復(fù)雜度體現(xiàn)的是找到軟件元素,進(jìn)行合適連接形成一定結(jié)構(gòu),達(dá)到高性能要求。

比如說一個(gè)大型 ERP 系統(tǒng),屬于業(yè)務(wù)復(fù)雜度高的系統(tǒng),你該如何去拆分它,拆分成一個(gè)個(gè)獨(dú)立完備、具有明確業(yè)務(wù)邊界的組件,這是做架構(gòu)設(shè)計(jì)需要思考的。

再比方說做一個(gè)秒殺系統(tǒng),系統(tǒng)復(fù)雜度要求就是性能復(fù)雜度,怎么能扛住秒殺的洪峰,這是性能復(fù)雜度需要解決的問題。

軟件開發(fā)和架構(gòu)設(shè)計(jì)的區(qū)別

軟件開發(fā)更多是面向確定性邏輯問題,依據(jù)自身對(duì)需求的理解進(jìn)行實(shí)現(xiàn),實(shí)現(xiàn)方式較為固定,流程化開發(fā)完成需求功能,實(shí)現(xiàn)最終目標(biāo)。

比方說實(shí)現(xiàn)訂單接收的能力,分幾步:參數(shù)驗(yàn)證、商品查詢、庫存預(yù)占、生成訂單、扣減庫存、修改訂單狀態(tài)、狀態(tài)回傳,業(yè)務(wù)邏輯較為固定,如果再加上編碼規(guī)范以及框架約束,除了數(shù)據(jù)模型以及編碼設(shè)計(jì)之外,其他方面涉及較少。

架構(gòu)設(shè)計(jì)更多是面向不確定性問題,怎么將系統(tǒng)拆分成組件,怎么去識(shí)別是不是組件、組件和組件之間怎么進(jìn)行連接,這些都是有很多種可能性的架構(gòu)方案。

解決一個(gè)軟件復(fù)雜度問題方案,有方案 A、方案 B,甚至有方案 C ,應(yīng)該用哪種,原因是什么,都是架構(gòu)設(shè)計(jì)需要思考的問題。

在多種方案之間如何來進(jìn)行決策,如何判斷自己選擇的方案是合理的,當(dāng)然決策能力也不是拍腦袋來決定的,它其實(shí)也需要一系列原則來進(jìn)行指導(dǎo),通過這些指導(dǎo)原則加上實(shí)際經(jīng)驗(yàn)來決策最優(yōu)方案。

架構(gòu)設(shè)計(jì)三原則

談到架構(gòu)設(shè)計(jì)不得不說三個(gè)基本原則,作為架構(gòu)設(shè)計(jì)過程中的參考,更好幫忙去做分析、做決策、做支持。

①合適原則

首先提到就是合適原則,一切不按實(shí)際場(chǎng)景出發(fā)的架構(gòu)設(shè)計(jì)都是在耍流氓。比如你想買個(gè)車子,買貴覺得性價(jià)比不高,買便宜了覺得開起來不舒適,你最終會(huì)挑一個(gè)適合現(xiàn)在經(jīng)濟(jì)能力范圍內(nèi)又比較舒適的車子,這就是合適原則。

以當(dāng)前業(yè)務(wù)需求和非功能性需求為目標(biāo),匹配業(yè)務(wù)發(fā)展所處階段,合理利用資源發(fā)揮最大價(jià)值(買車子需要匹配當(dāng)前經(jīng)濟(jì)狀態(tài))。

需要結(jié)合實(shí)際場(chǎng)景,合適的系統(tǒng)架構(gòu) (我買車子只是為了代步,不能說我覺得跑車氣派,我就買個(gè)跑車,這和業(yè)務(wù)實(shí)際場(chǎng)景不符合)。

還需要和當(dāng)前的業(yè)務(wù)規(guī)模以及最近 1-2 年的發(fā)展規(guī)劃相互匹配 (雖然我一次性付不起,但有穩(wěn)定經(jīng)濟(jì)收入,我可以考慮貸款,分 2 年期。這樣我既買到理想的車型,也不擔(dān)心壓力大)。

新技術(shù)推出,勢(shì)必是解決某一場(chǎng)景下的問題,但并不能解決所有問題,任何架構(gòu)都要綜合來看,結(jié)合合適原則綜合選擇。

②簡(jiǎn)單原則

其次是簡(jiǎn)單原則,大道至簡(jiǎn),一切簡(jiǎn)單化,用最簡(jiǎn)單的解決方案來解決問題 。

KISS (Keep Simple and Stupid) 是用戶體驗(yàn)的最高境界,同樣它適用于架構(gòu)設(shè)計(jì) 。

簡(jiǎn)單是軟件設(shè)計(jì)的目標(biāo),簡(jiǎn)單代碼占用的時(shí)間少,產(chǎn)生的漏洞少,并且易于修改 、維護(hù)、擴(kuò)展和重構(gòu)。

不要以為簡(jiǎn)單設(shè)計(jì)是沒有技術(shù)含量,用簡(jiǎn)單設(shè)計(jì)處理復(fù)雜問題更需要優(yōu)秀的架構(gòu)設(shè)計(jì)能力。

軟件系統(tǒng)之所以會(huì)被說成復(fù)雜,體現(xiàn)在結(jié)構(gòu)復(fù)雜以及邏輯復(fù)雜,而一個(gè)復(fù)雜問題是由多個(gè)簡(jiǎn)單問題構(gòu)成的。

難的是如何拆解它,將它拆解為多個(gè)問題,逐個(gè)解決,把復(fù)雜邏輯拆分為一個(gè)個(gè)單一執(zhí)行單元,單個(gè)執(zhí)行單元代碼量一定要盡可能少。

邏輯復(fù)雜系統(tǒng)在內(nèi)部實(shí)現(xiàn)所有邏輯功能,幾乎會(huì)導(dǎo)致每個(gè)環(huán)節(jié)都有問題,它需要面對(duì)不斷變化的需求,所有人維護(hù)同一套代碼,整個(gè)開發(fā)、測(cè)試、上線流程變得異常繁重。

③演化原則

最后是演化原則,只有變化是永恒不變的,優(yōu)秀架構(gòu)一定是以業(yè)務(wù)不斷發(fā)展而不斷演進(jìn)而來。

設(shè)計(jì)架構(gòu)要滿足當(dāng)時(shí)業(yè)務(wù)需要 ,具有可擴(kuò)展性和持續(xù)開發(fā)能力,能夠應(yīng)變后續(xù)架構(gòu)升級(jí)和調(diào)整。

要不斷地在實(shí)際應(yīng)用過程中迭代,保留優(yōu)秀設(shè)計(jì),修復(fù)有缺陷設(shè)計(jì),改正錯(cuò)誤設(shè)計(jì),剔除無用設(shè)計(jì),使架構(gòu)逐漸完善,要將變化部分和不變部分區(qū)分開。

架構(gòu)設(shè)計(jì)方法論

提到架構(gòu)設(shè)計(jì)方法論,先介紹下 TOGAF(The Open Group Architecture Framework),它由國(guó)際標(biāo)準(zhǔn)權(quán)威組織 The Open Group 制定 ,是一個(gè)行業(yè)標(biāo)準(zhǔn)的體系架構(gòu)框架 。

它是一套方法和工具,主要包含 TOGAF 能力框架、 TOGAF 架構(gòu)開發(fā)方法、 TOGAF 企業(yè)連續(xù)體和工具三大部分。

下面主要介紹下軟件開發(fā)方法(Architecture Development Method) ADM。

ADM 軟件開發(fā)方法是由一組按照架構(gòu)領(lǐng)域的架構(gòu)開發(fā)順序而排列成一個(gè)環(huán)的多個(gè)階段所構(gòu)成的。

ADM 基礎(chǔ)結(jié)構(gòu)圖如下圖所示:

圖 1:ADM 基礎(chǔ)結(jié)構(gòu)圖

預(yù)備階段:梳理業(yè)務(wù)需求,了解需求背后真實(shí)的業(yè)務(wù)目標(biāo)。

架構(gòu)遠(yuǎn)景:最終需要達(dá)成到一個(gè)效果,需要提前做規(guī)劃。

業(yè)務(wù)架構(gòu)、信息系統(tǒng)架構(gòu)、技術(shù)架構(gòu):屬于架構(gòu)域設(shè)計(jì)框架。

技術(shù)及解決方案:碰到技術(shù)問題都需要有一套甚至是多套解決方案,架構(gòu)設(shè)計(jì)職責(zé)就是做取舍、做決策。

遷移規(guī)劃、實(shí)施治理:后續(xù)線上運(yùn)維相關(guān)事項(xiàng),給出合理解決方案。

架構(gòu)設(shè)計(jì)方法論:是指導(dǎo)你如何來做架構(gòu)設(shè)計(jì),它有架構(gòu)域劃分,在軟件設(shè)計(jì)中架構(gòu)域包括:業(yè)務(wù)架構(gòu)、數(shù)據(jù)架構(gòu)、產(chǎn)品架構(gòu)、應(yīng)用架構(gòu)、技術(shù)架構(gòu)。

首先需要進(jìn)行業(yè)務(wù)需求結(jié)合業(yè)務(wù)場(chǎng)景的梳理,熟悉業(yè)務(wù)后,通過歸納以及抽象的方式,形成業(yè)務(wù)架構(gòu)。

依據(jù)業(yè)務(wù)架構(gòu)的理解,研發(fā)人員需要對(duì)業(yè)務(wù)做進(jìn)一步的抽象和沉淀,畫出與之相對(duì)應(yīng)的數(shù)據(jù)架構(gòu)和應(yīng)用架構(gòu),最后技術(shù)人員通過技術(shù)架構(gòu)來做功能實(shí)現(xiàn)。

業(yè)務(wù)架構(gòu)是目標(biāo)、是方向,應(yīng)用架構(gòu)是抽象、是歸納,技術(shù)架構(gòu)是手段、是系統(tǒng)落地的參考物。

下圖為 ADM 架構(gòu)開發(fā)概念藍(lán)圖:

圖 2:ADM 架構(gòu)開發(fā)概念藍(lán)圖

首先來看業(yè)務(wù)架構(gòu),業(yè)務(wù)一般為按照如下四層畫出業(yè)務(wù)架構(gòu)圖:

  • 場(chǎng)景層:描述業(yè)務(wù)場(chǎng)景。
  • 產(chǎn)品功能層:劃分產(chǎn)品功能以及模塊。
  • 領(lǐng)域模型層:通過對(duì)產(chǎn)品功能分析,抽象領(lǐng)域模型。
  • 依賴層:從業(yè)務(wù)層面考慮涉及到底層業(yè)務(wù)依賴哪些子系統(tǒng)或者組件。

其次是數(shù)據(jù)架構(gòu),數(shù)據(jù)架構(gòu)解決的是:

  • 需要什么數(shù)據(jù)
  • 怎么存儲(chǔ)
  • 如何設(shè)計(jì)

數(shù)據(jù)模型最常用視圖就是 ER 圖,它主要描述數(shù)據(jù)實(shí)體、屬性和關(guān)系。

  • 實(shí)體(Entity):領(lǐng)域?qū)ο蟆?/li>
  • 屬性(Attribute):領(lǐng)域?qū)ο髮傩浴?/li>
  • 聯(lián)系(RelationShip):兩個(gè)領(lǐng)域?qū)ο笾g的關(guān)系(1:1,1:n或者)。

再就是應(yīng)用架構(gòu),應(yīng)用架構(gòu)劃分出不同功能模塊,再根據(jù)功能模塊間的關(guān)系,組合成子系統(tǒng)。

應(yīng)用架構(gòu)關(guān)系三個(gè)問題:

  • 子系統(tǒng)如何劃分
  • 子系統(tǒng)之間什么關(guān)系
  • 考慮模塊的復(fù)用和功能的抽象

應(yīng)用架構(gòu)需要體現(xiàn)應(yīng)用架構(gòu)是否清晰、層次劃分是否明確、各應(yīng)用系統(tǒng)之間連接關(guān)系是否合理、系統(tǒng)之間耦合程度是否低、是否以統(tǒng)一方式對(duì)外提供一致服務(wù)接口。

最后是技術(shù)架構(gòu),技術(shù)架構(gòu)關(guān)注的問題有,如何使用技術(shù)手段來解決實(shí)際問題、技術(shù)框架如何選擇、技術(shù)中間件如何選擇、存儲(chǔ)如何來做、非功能性需求如何來實(shí)現(xiàn)等。

整體技術(shù)方案的輸出就是實(shí)現(xiàn)技術(shù)架構(gòu)的過程,最終會(huì)形成關(guān)鍵技術(shù)實(shí)現(xiàn)要點(diǎn),形成一個(gè)完整的技術(shù)架構(gòu)。

寫在最后

上文闡述了架構(gòu)設(shè)計(jì)的一些基本原則,幫助讀者思考如何通過架構(gòu)設(shè)計(jì)理論知識(shí)提升自身的架構(gòu)能力,從而成為一名合格架構(gòu)人員。

架構(gòu)設(shè)計(jì)是一個(gè)長(zhǎng)期并且需要不斷打磨的過程,任何系統(tǒng)的架構(gòu)都做不到一蹴而就,需要系統(tǒng)面臨技術(shù)問題、業(yè)務(wù)問題時(shí)不斷地優(yōu)化和迭代。

架構(gòu)設(shè)計(jì)除了掌握技術(shù)框架、技術(shù)組件、技術(shù)原理性知識(shí)外,也需要系統(tǒng)性掌握架構(gòu)基礎(chǔ)知識(shí),以架構(gòu)設(shè)計(jì)原則為指導(dǎo),掌握架構(gòu)設(shè)計(jì)方法論,通過不斷地優(yōu)化和迭代,來實(shí)現(xiàn)更優(yōu)秀的架構(gòu)設(shè)計(jì)。

作者:京東物流江龍飛

編輯:陶家龍

來源:轉(zhuǎn)載自公眾號(hào)京東技術(shù)(ID:jingdongjishu)

 

責(zé)任編輯:武曉燕 來源: 京東技術(shù)
相關(guān)推薦

2013-05-27 10:58:28

Tumblr架構(gòu)設(shè)計(jì)雅虎收購

2019-06-13 16:30:37

代碼Java編程語言

2023-07-05 08:00:52

MetrAuto系統(tǒng)架構(gòu)

2015-06-02 04:17:44

架構(gòu)設(shè)計(jì)審架構(gòu)設(shè)計(jì)說明書

2025-04-15 04:00:00

2015-06-02 04:34:05

架構(gòu)設(shè)計(jì)

2012-06-07 10:45:12

軟件架構(gòu)設(shè)計(jì)原則

2019-11-25 10:58:19

Tomcat架構(gòu)Web

2009-02-01 10:17:19

Java架構(gòu)設(shè)計(jì)設(shè)計(jì)模式

2023-05-12 08:06:46

Kubernetes多云架構(gòu)

2024-04-17 08:03:45

架構(gòu)設(shè)計(jì)Java

2009-07-10 09:31:57

MyEclipse U

2017-11-17 07:06:27

互聯(lián)網(wǎng)分層架構(gòu)APP

2024-08-18 14:09:24

2021-07-21 16:30:38

iOSAPP架構(gòu)

2012-09-19 13:46:37

存儲(chǔ)存儲(chǔ)設(shè)計(jì)快速表態(tài)

2013-09-02 17:46:41

MVC架構(gòu)設(shè)計(jì)MVC架構(gòu)設(shè)計(jì)

2024-09-18 09:04:33

架構(gòu)模式查詢

2013-09-02 13:52:30

網(wǎng)絡(luò)基礎(chǔ)架構(gòu)基礎(chǔ)架構(gòu)設(shè)計(jì)

2020-12-08 11:17:41

微內(nèi)核架構(gòu)設(shè)計(jì)
點(diǎn)贊
收藏

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