<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          .NET 云原生架構(gòu)師訓(xùn)練營(設(shè)計(jì)原則與模式)--學(xué)習(xí)筆記

          共 2310字,需瀏覽 5分鐘

           ·

          2021-07-05 11:57

          在復(fù)雜系統(tǒng)的架構(gòu)設(shè)計(jì)中引入設(shè)計(jì)原則與模式,能夠極大降低復(fù)雜系統(tǒng)開發(fā)、和維護(hù)的成本

          目錄

          • 幾個(gè)問題

          • 為什么要學(xué)習(xí)設(shè)計(jì)模式

          • 優(yōu)良架構(gòu)設(shè)計(jì)的具體指標(biāo)

          • 理解復(fù)雜系統(tǒng)

          • 面向?qū)ο笏枷耄ㄖ笇?dǎo)復(fù)雜系統(tǒng)的分析、設(shè)計(jì)、實(shí)現(xiàn))

          • 設(shè)計(jì)原則

          • 設(shè)計(jì)模式

          幾個(gè)問題

          • 單一職責(zé)原則的職責(zé)是什么

          • 依賴倒置中的依賴是什么?(依賴注入DI,和 IOC 控制反轉(zhuǎn))

          • 組合與聚合的區(qū)別是什么

          • 貧血模型與充血模型的差異在什么地方

          • 閱讀開源項(xiàng)目代碼時(shí),單個(gè)方法可以理解,整體看不懂

          為什么要學(xué)習(xí)設(shè)計(jì)模式

          • 有助于更快地讀懂開源項(xiàng)目代碼

          • 自己編寫通用組件、框架

          設(shè)計(jì)模式可以幫助我們優(yōu)化系統(tǒng)的設(shè)計(jì),增強(qiáng)系統(tǒng)的健壯性,可擴(kuò)展性

          優(yōu)良架構(gòu)設(shè)計(jì)的具體指標(biāo)

          • 可維護(hù)性

          • 可讀性

          • 可擴(kuò)展性

          • 靈活性

          • 簡潔性

          • 可復(fù)用性

          • 可測(cè)試性

          可維護(hù)性

          • 在不破壞原有代碼設(shè)計(jì)、不引入新的 bug 的情況下,能夠快速地修改或者添加代碼

          • 代碼分層清晰、模塊化好、高內(nèi)聚低耦合、遵從基于接口而非實(shí)現(xiàn)編程的設(shè)計(jì)原則

          可讀性

          • 任何傻瓜都會(huì)編寫計(jì)算機(jī)能理解的代碼

          • 好的程序員能夠編寫人能夠理解的代碼

          • 代碼只是偶爾拿出來給機(jī)器讀一下,大多數(shù)時(shí)候都是給人讀的

          可擴(kuò)展性

          • 代碼預(yù)留了一些功能擴(kuò)展點(diǎn),可以把新功能代碼,直接插到擴(kuò)展點(diǎn)上,而不需要因?yàn)樘砑右粋€(gè)功能而大動(dòng)干戈,改動(dòng)大量原始代碼

          • 對(duì)修改關(guān)閉,對(duì)擴(kuò)展開放原則

          靈活性

          • 當(dāng)我們添加一個(gè)新的功能代碼的時(shí)候,原有的代碼已經(jīng)預(yù)留好了擴(kuò)展點(diǎn),我們不需要修改原有的代碼,只要在擴(kuò)展點(diǎn)上添加新的代碼即可

          • 當(dāng)我們要實(shí)現(xiàn)一個(gè)功能的時(shí)候,發(fā)現(xiàn)原有代碼中,已經(jīng)抽象出了很多底層可以復(fù)用的模塊、類等代碼,我們可以拿來直接使用

          • 當(dāng)我們使用某組接口的時(shí)候,如果這組接口可以對(duì)應(yīng)各種使用場(chǎng)景,滿足各種不同的需求

          簡潔性

          • 代碼簡單,邏輯清晰

          • KISS 原則(Keep It Simple, Stupid)

          可復(fù)用性

          • 解耦、高內(nèi)聚、低耦合、模塊化、組件化

          可測(cè)試性

          • 單元測(cè)試友好 Mock

          理解復(fù)雜系統(tǒng)

          • 系統(tǒng)思維

          • 什么是復(fù)雜系統(tǒng)

          • 系統(tǒng)復(fù)雜的原因

          • 軟件系統(tǒng)的復(fù)雜性

          • 控制復(fù)雜性

          • 面向過程與面向算法

          系統(tǒng)思維

          什么是系統(tǒng)?

          • 系統(tǒng)是由一組實(shí)體和這些實(shí)體之間的關(guān)系所構(gòu)成的集合,其功能要大于這些實(shí)體各個(gè)功能之各(涌現(xiàn)原則)

          • 系統(tǒng)并不是其組成物的簡單加總,而是這些組成物之間互動(dòng)的產(chǎn)物 -- Russell Ackoff

          • 整體大于其各部分之和 -- 亞里士多德

          什么是復(fù)雜系統(tǒng)

          由很多高度相關(guān)、高度互聯(lián)和高度混雜的元素或?qū)嶓w所組成的系統(tǒng)

          系統(tǒng)復(fù)雜的原因

          • 我們總是有“更多的要求”(更多功能,更好性能,更健壯,更靈活)

          • 我們要求系統(tǒng)能夠與其它系統(tǒng)相互協(xié)作,相互連接

          • 要用大量的信息來指定并描述

          軟件系統(tǒng)的復(fù)雜性

          • 問題域的復(fù)雜性

          • 管理開發(fā)過程的復(fù)雜性

          • 軟件系統(tǒng)中隨處可能出現(xiàn)的靈活性

          • 描述離散系統(tǒng)行為的問題

          控制復(fù)雜性

          • 算法分解

          • 面向?qū)ο蠓纸?/p>

          面向?qū)ο笏枷耄ㄖ笇?dǎo)復(fù)雜系統(tǒng)的分析、設(shè)計(jì)、實(shí)現(xiàn))

          • 面向過程與面向算法

          • 對(duì)象

          • 抽象

          • 封裝

          • 分解

          • 分層

          面向過程與面向算法

          面向?qū)ο?/h4>

          它以類或?qū)ο笞鳛榻M織代碼的基本單元,并將封裝、抽象、繼承、多態(tài)四個(gè)特性,作為代碼設(shè)計(jì)和實(shí)現(xiàn)的基石

          面向過程

          它以過程(可以理解為方法、函數(shù)、操作)作為組織代碼的基本單元,以數(shù)據(jù)(可以理解為成員變量、屬性)與方法相分離為最主要的特點(diǎn)。面向過程風(fēng)格是一種流程化的編程風(fēng)格,通過拼接一組順序執(zhí)行的方法來操作數(shù)據(jù)完成一項(xiàng)功能

          對(duì)象

          對(duì)象是一個(gè)實(shí)體,這個(gè)實(shí)體具有明確定義的邊界(Boundary)和標(biāo)識(shí)(Identity),并且封裝了狀態(tài)(State)和行為(Behavior)

          • 對(duì)象具有明確定義的邊界和標(biāo)識(shí)

          • 對(duì)象封裝了狀態(tài)和行為

          類是一種抽象,它將相似的實(shí)體抽象成相同的概念,這種抽象過程強(qiáng)調(diào)相關(guān)特征而忽略其他特征

          抽象

          抽象(Abstraction)的過程就是揭示事物區(qū)別于其他事物的本質(zhì)特征的過程,是一個(gè)分析和理解問題的過程,這個(gè)過程取決于使用者的目的,它應(yīng)該包括使用者所感興趣的那些職責(zé)問題,而忽略掉其他不相關(guān)的部分。從對(duì)象到類的過程就是抽象的過程,即將所見到的具體實(shí)體抽象成概念,從而可以在計(jì)算機(jī)世界中進(jìn)行描述和對(duì)其采取各種操作

          最少承諾

          根據(jù)這個(gè)原則,對(duì)象的接口只提供它的基本行為,此外別無其他

          最少驚奇

          這個(gè)原則是指抽象捕捉了某個(gè)對(duì)象的全部行為,不多也不少,并且不提供抽象之外的驚奇效果或副作用

          封裝

          封裝是一個(gè)過程,它分隔構(gòu)成抽象的結(jié)構(gòu)和行為的元素。封裝的作用是分離抽象的概念接口及其實(shí)現(xiàn)

          • 抽象和封裝是互補(bǔ)的概念:抽象關(guān)注的是對(duì)象可以觀察到的行為,而封裝關(guān)注這種行為的實(shí)現(xiàn)

          • 抽象“幫助人們思考他們做什么”,而封裝“讓程序可以借助最少的工作進(jìn)行可靠的修改”

          • 封裝在不同的抽象之間提供了明確的邊界,因此導(dǎo)致了清晰的關(guān)注點(diǎn)分離

          • 要讓抽象能工作,必須將實(shí)現(xiàn)封裝起來

          • 明智的封裝讓可能改變的設(shè)計(jì)決策局部化

          • 絕大多數(shù)情況下,只有當(dāng)這個(gè)抽象的創(chuàng)造者顯示地暴露出實(shí)現(xiàn),而且客戶愿意接受由此帶來的額外的復(fù)雜性時(shí),才會(huì)這樣做

          分解

          分解(Decomposition)是指將單個(gè)大規(guī)模復(fù)雜系統(tǒng)劃分為多個(gè)不同的小構(gòu)件。分解后的構(gòu)件通過抽象和封裝等技術(shù)形成相對(duì)獨(dú)立的單元,這些單元可以獨(dú)立地設(shè)計(jì)和開發(fā),從而實(shí)現(xiàn)化繁為簡、分而治之,以應(yīng)對(duì)系統(tǒng)的復(fù)雜系,降低軟件開發(fā)成本

          分層

          分層(Hierarchy)是指面向不同的目標(biāo)建立不同的抽象級(jí)別層次,從而在不同的抽象層次對(duì)系統(tǒng)進(jìn)行分解,進(jìn)一步簡化對(duì)系統(tǒng)的理解

          課程鏈接

          .NET云原生架構(gòu)師訓(xùn)練營講什么,怎么講,講多久


          歡迎各位讀者加入微信群一起學(xué)習(xí)交流,
          在公眾號(hào)后臺(tái)回復(fù)“加群”即可~~

          瀏覽 60
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  乱视频在线 | 国产91精品在线观看 | 一级无码视 | 国外黄A片免费看 | 五月丁香伊人少妇激情网 |