1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 2310字,需瀏覽 5分鐘

         ·

        2021-07-05 11:57

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

        目錄

        • 幾個(gè)問(wèn)題

        • 為什么要學(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è)問(wèn)題

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

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

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

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

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

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

        • 有助于更快地讀懂開(kāi)源項(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ò)展性

        • 靈活性

        • 簡(jiǎn)潔性

        • 可復(fù)用性

        • 可測(cè)試性

        可維護(hù)性

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

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

        可讀性

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

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

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

        可擴(kuò)展性

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

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

        靈活性

        • 當(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ù)用的模塊、類等代碼,我們可以拿來(lái)直接使用

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

        簡(jiǎn)潔性

        • 代碼簡(jiǎn)單,邏輯清晰

        • 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ù)雜性

        • 面向過(guò)程與面向算法

        系統(tǒng)思維

        什么是系統(tǒng)?

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

        • 系統(tǒng)并不是其組成物的簡(jiǎn)單加總,而是這些組成物之間互動(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é)作,相互連接

        • 要用大量的信息來(lái)指定并描述

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

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

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

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

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

        控制復(fù)雜性

        • 算法分解

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

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

        • 面向過(guò)程與面向算法

        • 對(duì)象

        • 抽象

        • 封裝

        • 分解

        • 分層

        面向過(guò)程與面向算法

        面向?qū)ο?/h4>

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

        面向過(guò)程

        它以過(guò)程(可以理解為方法、函數(shù)、操作)作為組織代碼的基本單元,以數(shù)據(jù)(可以理解為成員變量、屬性)與方法相分離為最主要的特點(diǎn)。面向過(guò)程風(fēng)格是一種流程化的編程風(fēng)格,通過(guò)拼接一組順序執(zhí)行的方法來(lái)操作數(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í)體抽象成相同的概念,這種抽象過(guò)程強(qiáng)調(diào)相關(guān)特征而忽略其他特征

        抽象

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

        最少承諾

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

        最少驚奇

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

        封裝

        封裝是一個(gè)過(guò)程,它分隔構(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)封裝起來(lái)

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

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

        分解

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

        分層

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

        課程鏈接

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


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

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产一区二区三区免费观看 | 插菊花av | 韩国三级hd中文字幕下载 | 各种少妇bbw撒尿484613 | 国产久操视频 | 91麻豆精品国产自产 | 久久精品一区二区三区视频 | 日日操日日插 | 天天操夜夜爽 | 欧美一级黄色大片视频 |