主頁 > 軟體設計 > 如何做架構設計?

如何做架構設計?

2023-06-08 09:34:40 軟體設計

也許您對軟體設計存在一些疑惑,或者缺乏明確思路,那么本文將非常適合您,

1、設計很重要

我們可以看一下周邊的事物,那些好的東西,他們并不會天然存在,都是被設計出來的,因此設計就是創造和改善事物的重要程序,設計的重要之處在于,最初的設計往往決定最終的結果,甚至決定著事物的長期的發展,例如兩個品牌的手機之間,他們可以使用同一個代工廠,但他們差異在設計時就已經決定了,

架構設計也是如此,我見過很多的軟體系統,他們經過了很多年的演進,在沒有完全重構的情況下,始終無法改變最初設計模樣,最初的設計決定了長期的發展,而對于業務深度耦合的系統,重構成本非常高,風險也非常大,變化也更加不確定,所以要更加重視設計,

我們要尋求更好的技術方案,推動架構的良性演進,每一步都是經過深度思考的,而架構設計方法就是幫助我們思考的框架,

通過做架構設計,我們應該提升軟體的質量和效率,降低風險和成本,

2、架構設計的目的是什么?

是為了解決軟體系統復雜度帶來的問題(架構的目標是用于管理復雜性、易變性和不確定性,以確保在長期的系統演化程序中,一部分架構的變化不會對其它部分產生不必要的負面影響,這樣做可以確保業務和研發效率的敏捷,讓應用的易變部分能夠頻繁地變化,對應用的其它部分的影響盡可能地小,)

要解決復雜度問題,首先需要識別復雜度的來源,主要集中在以下三個方面:

業務復雜度:流程多,參與者多、狀態和變數多等;由業務本身決定,但業務復雜不代表軟體系統復雜,例如作業流引擎并不復雜,但他可以做非常復雜的業務,在面對復雜業務時,我們常使用抽象思維,不要讓軟體邏輯與業務邏輯系結在一起,

技術復雜度:高性能、高可用、高可擴展、安全,成本、規模等;這部分復雜度常常由技術本身決定,也應該由技術本身解決,通常是采用更合理的框架和工具;避免這些技術特性穿透到應用層,也可以有所取舍,在不同業務情況下,采用不同的實作程度,

設計復雜度:職責不是最小的完備的、概念不清晰的、層次不清的、業務邏輯與技術實作系結的,組件過多以及關聯依賴復雜的;這部分是由設計不合理導致的,也是對業務系統影響最大的一部分,要通過良好的設計來解決,

3、架構設計的主要內容是什么?

找到系統中的元素并搞清楚他們之間關系(如果我們不知道系統是怎么運行的,那么他一定是很復雜的,對于龐大的軟體系統,如何才可以被掌控?這就需要將大系統分解為很元素,每個元素需要足夠簡單,并且元素與元素之間的關系清晰)

軟體架構是一種結構,結構中包含了一些元素和元素之間的關系描述;

元素的種類:系統、子系統、模塊,組件、服務、類、介面...

關系的種類:層次關系、資料關系、呼叫關系、影響力關系...

"架構表示對一個系統的成型起關鍵作用的設計決策,架構定系統基本就成型了,這里的關鍵性可以由變化的成本來決定,"-- Grady Booch.

"Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change." -- Grady Booch.

4、架構設計有什么原則?

合適原則:“合適優于業界領先”, 真正優秀的架構都是在企業當前人力、條件、業務等各種約束下設計出來的,能夠合理地將資源整合在一起并發揮出最大功效,并且能夠快速落地,

簡單原則:“簡單優于復雜”, 優先使用直接的不復雜的方案解決問題;

演化原則:“演化優于一步到位”,軟體需要根據業務的發展不斷地變化,架構要不斷地在實際應用程序中迭代,在某個階段必定有所取舍,但架構的演化必須是低成本的,當業務發生變化時能夠最高效的迭代;在這個程序中修復缺陷的設計,積累優秀的設計;

5、架構師的職責是什么?

業務分析:梳理對業務和技術的理解和判斷、形成業務領域知識、明確的業務目標和本質的業務訴求;

系統建設:降低系統復雜性、規劃系統遠期架構、推動架構的合理演化;

技術方案:選擇合適的技術、提供對業務的解決方案,把控全域,包括質量、效率、成本、風險;

關鍵問題:攻克難點,解決關鍵問題,指導研發落地;

知識沉淀:以體系化的表達方式,面向不同人員的視圖語言,持續完善知識系統;

6、架構設計程序如何?

程序:全域分析業務 → 設計方案 → 概要設計 → 詳細設計 → 補充設計

視角:業務級 → 系統級 → 應用級 → 模塊級 → 技術級 → 代碼級 → 實施級;

架構師的協作鏈路較長,每一個程序都應該留下資料,越下游的角色往往需要更全面的資料;架構設計檔案應該包含架構師參與的所有環節,以及這些環節產生的圖文說明;不僅僅是空洞的結果,應該包含架構師的思路和想法;

全域分析階段

這階段需要對業務需求進行全面分析,需要將名詞羅列出來,區分名詞是功能、流程、名詞、參與者的哪一種,再通過分析業務的本質并找到其中的關鍵名詞,關鍵的名詞被稱之為領域,可以圍繞關鍵的領域構建業務模型;

在這個程序中,需要統一語言、識別核心領域、按照相關性將功能歸屬到對應的領域,對領域之間的關系做出必要的描述,輸出物是名詞與解釋、領域以及擁有的能力,業務架構,

名詞的概念必須是清晰的,領域的職責必須是明確的,領域擁有的能力必須是相關的;

其中業務架構可按照場景層、功能層、領域層、依賴層劃分,例如下圖;

設計方案階段

在完成全域分析之后,我們應該設計技術方案,盡可能提供多個備選方案的圖文說明,需要對備選方案做充分的優劣分析,最終取舍一項最合適的方案,沒有被選擇的方案(或者取舍的部分)也要被說明;

我們需要找到各項約束條件(時間、人力、硬體等),評估在約束條件允許的情況下,哪個備選方案更合適,我們可能考慮如下方面:

方案對業務影響:主要判斷需求覆寫程度、實作業務的短期目標、考慮業務的長期目標;

方案的技術需求:安全是否滿足、性能是否滿足、規模是否滿足、可維護性;

方案的可擴展性、方案的復雜程度、方案是否能夠演進、方案演進成本如何(高成本的 慎重考慮)、方案的影響力傳播如何(對上下游影響較大的 慎重考慮);

架構設計階段-應用架構

用以說明當前系統的元素(系統、子系統、模塊,組件)以及他們之間的關系(層次關系、依賴關系)

重點是將可復用的組件抽象后下沉,越往下層越是穩定和通用,由上層承接不穩定的業務;

應用架構圖體現了層次關系,以及不完全體現了依賴關系,依賴只能是上層依賴下層,示例如下圖

架構設計階段-部署架構

用以說明支持應用所需要的硬體能力、以及外部中間件、網路、機房等情況;可參考下面兩張圖;

架構設計階段-資料架構

描述資料資產結構、存盤、流轉、災備的情況;最常用的是ER圖;

架構設計階段-技術架構

描述一些關鍵技術的說明,比如性能、安全、互動等;

描述技術選型和代碼框架的說明,比如DDD推薦的菱形對稱架構,文字和圖片描述都可以;

詳細設計階段

詳細設計是對質量的把關、是對研發落地的指導;

這部分涉及的內容較多,比如服務、事件、介面、物體和值物件、時序圖、資料庫設計等等;

領域服務、領域事件

時序圖

物體關系圖

7、有什么方法能做的更好?

學習和使用領域驅動設計,使用正確的方法梳理和理解業務,并落實到架構程序;

盡早的介入,從業務領域建模和在產品方案階段介入、推動領域知識的傳遞、為后續做好鋪墊;

積累業務能力和洞察力,需要識別關鍵部分與輔助部分、預料可擴展部分與不變部分,識別水平能力與垂直擴展;

對于架構設計產物,不要只畫圖,多輔以文字表述圖中內容;

8、還需要掌握什么知識?

業務知識:業務架構(是對當前業務、領域、能力、流程、參與者、場景的介紹),現狀架構(是對當前架構的描述,可以包含應用架構、技術架構、部署架構、資料架構等),愿景架構( 是架構應該演進到的完美情況),存在問題(現在面對的痛點、無用部分、缺陷部分)

高性能:多執行緒、佇列、快取、分片、異步化,前置化、靜態化、預處理;

高可用:限流、降級、冗余、災備、回滾、灰度;

擴展性:多型、防腐,依賴反轉(業務身份、擴展點、SPI),抽象化(比如流程引擎、規則引擎等)、事件驅動、設計模式;

本文部分圖片來源于互聯網

作者:京東科技 董健

來源:京東云開發者社區

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/554625.html

標籤:其他

上一篇:AI人工智能領域精美繪圖模板分享

下一篇:返回列表

標籤雲
其他(160591) Python(38215) JavaScript(25484) Java(18209) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7235) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4585) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1983) 功能(1967) HtmlCss(1955) Web開發(1951) C++(1933) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1879) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 如何做架構設計?

    我們要尋求更好的技術方案,推動架構的良性演進,每一步都是經過深度思考的,而架構設計方法就是幫助我們思考的框架。通過做架構設計,我們應該提升軟體的質量和效率,降低風險和成本。 ......

    uj5u.com 2023-06-08 09:34:40 more
  • AI人工智能領域精美繪圖模板分享

    ![cover.jpeg](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e86fc6dcb452419498a7db6878591e30~tplv-k3u1fbpfcp-watermark.image?) #### 1 人工智能的發展歷程 如今 ......

    uj5u.com 2023-06-08 09:34:36 more
  • 當“代碼農”遇上“碼農”:揭秘主干開發的那些事兒

    前段時期我負責部門內部主干開發落地相關事宜,這個程序中,也真真切切的體會到了多人開發程序中,面對特性分支管理中,大家遇到的一些困擾,尤其面對敏捷迭代的開發方式,合并沖突,集成測驗,代碼重用等方面,都與高效兩個字背離。當然,我在推進主干開發程序中,也遇到了一些問題和坎坷,在這里,集中的做一次分享。 ......

    uj5u.com 2023-06-08 09:34:30 more
  • 驅動開發:內核封裝WFP防火墻入門

    WFP框架是微軟推出來替代TDIHOOK傳輸層驅動介面網路通信的方案,其默認被設計為分層結構,該框架分別提供了用戶態與內核態相同的AIP函式,在兩種模式下均可以開發防火墻產品,以下代碼我實作了一個簡單的驅動過濾防火墻。WFP 框架分為兩大層次模塊,用戶態基礎過濾引擎`BFE (BaseFilteri... ......

    uj5u.com 2023-06-08 09:34:04 more
  • 移動應用架構新思路——WePY+小程式容器

    WePY(微信小程式開發框架)是一個基于組件化開發思想的微信小程式開發框架。它類似于Vue.js框架,通過封裝小程式原生的API,提供了更加簡潔、高效的開發方式。 WePY的主要特點包括: 組件化開發:WePY將頁面拆分為多個組件,每個組件有自己的樣式、模板和邏輯。這種組件化的開發方式能夠提高代碼的 ......

    uj5u.com 2023-06-08 09:33:49 more
  • 如何做架構設計?

    我們要尋求更好的技術方案,推動架構的良性演進,每一步都是經過深度思考的,而架構設計方法就是幫助我們思考的框架。通過做架構設計,我們應該提升軟體的質量和效率,降低風險和成本。 ......

    uj5u.com 2023-06-08 09:33:45 more
  • AI人工智能領域精美繪圖模板分享

    ![cover.jpeg](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e86fc6dcb452419498a7db6878591e30~tplv-k3u1fbpfcp-watermark.image?) #### 1 人工智能的發展歷程 如今 ......

    uj5u.com 2023-06-08 09:33:41 more
  • 當“代碼農”遇上“碼農”:揭秘主干開發的那些事兒

    前段時期我負責部門內部主干開發落地相關事宜,這個程序中,也真真切切的體會到了多人開發程序中,面對特性分支管理中,大家遇到的一些困擾,尤其面對敏捷迭代的開發方式,合并沖突,集成測驗,代碼重用等方面,都與高效兩個字背離。當然,我在推進主干開發程序中,也遇到了一些問題和坎坷,在這里,集中的做一次分享。 ......

    uj5u.com 2023-06-08 09:33:35 more
  • 【618備戰巡禮】“三高”之第一高--如何打造高可用系統

    我們經常會說互聯網“三高”,那什么是三高呢?我們常說的三高,高并發、高可用、高性能,這些技術是構建現代互聯網應用程式所必需的。對于京東618備戰來說,所有的中臺系統服務,無疑都是圍繞著三高來展開的。對于一個程式員,或多或少都能說出一些跟三高系統有關的技術點,而我本篇文章的目的,就是幫大家系統的梳理一... ......

    uj5u.com 2023-06-06 19:10:35 more
  • 【618備戰巡禮】“三高”之第一高--如何打造高可用系統

    我們經常會說互聯網“三高”,那什么是三高呢?我們常說的三高,高并發、高可用、高性能,這些技術是構建現代互聯網應用程式所必需的。對于京東618備戰來說,所有的中臺系統服務,無疑都是圍繞著三高來展開的。對于一個程式員,或多或少都能說出一些跟三高系統有關的技術點,而我本篇文章的目的,就是幫大家系統的梳理一... ......

    uj5u.com 2023-06-06 19:10:01 more