成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

模式的模式:從設(shè)計(jì)模式到元模式

開(kāi)發(fā) 前端
最近的一兩個(gè)月里,我一直在研究各類(lèi)的模式:設(shè)計(jì)模式、架構(gòu)模式、容器模式,以及其它一些特定領(lǐng)域的模式(如并行計(jì)算模式)等等。

 [[394175]]

最近的一兩個(gè)月里,我一直在研究各類(lèi)的模式:設(shè)計(jì)模式、架構(gòu)模式、容器模式,以及其它一些特定領(lǐng)域的模式(如并行計(jì)算模式)等等。

經(jīng)歷了一番買(mǎi)書(shū)、讀論文、讀代碼,我發(fā)現(xiàn)了以前對(duì)于模式的理解不夠深刻。也因此呢,這篇文章就是用來(lái)記錄一些缺乏的東西,諸如于模式語(yǔ)言、模式的模式等。

PS:為了方便閱讀,本文的書(shū)名使用都是簡(jiǎn)寫(xiě)模式,全稱(chēng)在最后的相關(guān)資料中。

模式重談

為了避免出現(xiàn)類(lèi)似于 Datum 是最好的語(yǔ)言這一類(lèi)的問(wèn)題,在那之前,我得先闡述一下對(duì)于模式的看法:

  • 模式是對(duì)于慣用方式的總結(jié),不限于編程,有相當(dāng)多的人習(xí)慣了使用各種設(shè)計(jì)模式,但是他并不知道這是何種模式。它是一個(gè)概念字表,用于快速溝通。
  • 模式是解決方案,滿足錘子定律,只有遇到特定的問(wèn)題時(shí),你才會(huì)需要它。
  • 模式是適用于特定場(chǎng)景的,大部分的模式對(duì)于當(dāng)前所處的系統(tǒng)是無(wú)用的,往往只有少數(shù)的模式是適合的。
  • 模式是知識(shí)體系的展現(xiàn),掌握模式的多少,更多的說(shuō)明見(jiàn)多識(shí)廣,并不一定代表真實(shí)的代碼水平和能力。
  • 模式需要刻意練習(xí),學(xué)習(xí)模式是一個(gè)漫長(zhǎng)的過(guò)程,所以總會(huì)遇到理解解決、使用錯(cuò)誤的情況,不要擔(dān)心。
  • 模式種類(lèi)繁多,計(jì)算機(jī)行業(yè)普遍認(rèn)同的是:模式的起源是亞歷山大的《建筑的永恒之道》。在更早的時(shí)間里,也還有對(duì)應(yīng)的總結(jié),但是這里是最體系化的技巧。

除了設(shè)計(jì)模式之外,我們所處的行業(yè)還有大量的其它模式:

  • 容器設(shè)計(jì)模式。應(yīng)對(duì)于云原生應(yīng)用下一系列復(fù)雜的分式場(chǎng)景,Google 的工程師發(fā)表了相關(guān)的論文對(duì)此進(jìn)行總結(jié),常見(jiàn)的有 Sidecar、Adapter、Ambassador 等。
  • 架構(gòu)模式。架構(gòu)模式是在給定上下文中解決軟件架構(gòu)中常見(jiàn)問(wèn)題的通用,可重用的解決方案。除此,一些常見(jiàn)的架構(gòu)風(fēng)格,如微服務(wù)、事件驅(qū)動(dòng)架構(gòu)等,從大類(lèi)上來(lái)說(shuō)也被歸納到架構(gòu)模式中。
  • ……

所以,你會(huì)發(fā)現(xiàn)這些模式只是人們對(duì)于慣用法的總結(jié)。

尋找模式

回過(guò)頭來(lái)看,當(dāng)我們會(huì)發(fā)現(xiàn)進(jìn)入一個(gè)新的領(lǐng)域,進(jìn)行相關(guān)領(lǐng)域的架構(gòu)設(shè)計(jì)之時(shí),我們會(huì)不斷搜尋各類(lèi)的資料,而后再去貼合到設(shè)計(jì)中去。實(shí)際上呢,我們是在尋找該領(lǐng)域的模式,有了這些模式,便可以照貓畫(huà)虎的設(shè)計(jì)一個(gè)系統(tǒng),而不會(huì)出現(xiàn)太大的問(wèn)題。

運(yùn)氣好的情況下,我們甚至于能比在這個(gè)領(lǐng)域的大多數(shù)人做得更好 —— 因?yàn)槲覀兯莆盏氖墙鉀Q這一類(lèi)問(wèn)題的模式。

這時(shí),我們已經(jīng)有一個(gè)很有優(yōu)勢(shì)性的套路,以幫助我們更好地進(jìn)入新的領(lǐng)域。但是呢,作為一個(gè)新的領(lǐng)域的初來(lái)者,往往不知道到底應(yīng)該采用哪一種模式,也不確定模式之間存在何種關(guān)系。

相關(guān)書(shū)籍:《設(shè)計(jì)模式》

模式歸類(lèi):目錄、集合、倉(cāng)庫(kù)

在一個(gè)軟件系統(tǒng)中,模式很少獨(dú)立存在,往往是多個(gè)模式相互組合,用于解決特定的問(wèn)題。而其中的一種組織方式的模式就是模式集合。隨后,根據(jù)不同的需求,再對(duì)進(jìn)行分門(mén)別類(lèi)。如《POSA 5》所介紹的幾種方式:

  • 即時(shí)(ad hoc)組織。
  • 根據(jù)層次劃分:根據(jù)抽象、粒度和規(guī)模的層次劃分。
  • 根據(jù)領(lǐng)域組織:電信、金融、電子商務(wù)等。
  • 根據(jù)分區(qū)組織:歸屬于架構(gòu)的哪一部分。如層、階層(tier)、組件和包都是分區(qū)的例子
  • 根據(jù)意圖組織:如 POSA、GoF 的 23 種設(shè)計(jì)模式、DDD
  • ……

接著,讓我們來(lái)看幾個(gè)分類(lèi)示例。

設(shè)計(jì)模式的組織

在《設(shè)計(jì)模式》一書(shū)中,引入的概念是『設(shè)計(jì)模式空間』,在這里它們被分為了三大類(lèi):

  • 創(chuàng)建型模式:?jiǎn)卫J健⒊橄蠊S模式、建造者模式、工廠模式、原型模式。
  • 結(jié)構(gòu)型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。
  • 行為型模式:模版方法模式、命令模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、解釋器模式、狀態(tài)模式、策略模式、職責(zé)鏈模式、訪問(wèn)者模式

其劃分的兩條準(zhǔn)分別是: 目的準(zhǔn)則,用來(lái)完成什么工作;范圍準(zhǔn)則,指定的模式是用于類(lèi)還是用于對(duì)象。

DDD 的組織

《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》一書(shū)其中也是一本模式合集,這就是為什么這本書(shū)不易于讀懂的原因之一。另外一個(gè)原因則是,翻譯這本書(shū)的人沒(méi)有理解好什么是統(tǒng)一語(yǔ)言。

在 《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》 一書(shū)以多種形式組織了模式,依次的四個(gè)部分是(PS:個(gè)人臨時(shí)總結(jié)):

  1. 運(yùn)用領(lǐng)域模型 —— 『模型知識(shí)提取的模式』
  2. 模型驅(qū)動(dòng)設(shè)計(jì)的構(gòu)造塊 —— 『模型設(shè)計(jì)的模式』
  3. 通過(guò)重構(gòu)來(lái)加深理解 —— 『模型優(yōu)化的模式』
  4. 戰(zhàn)略設(shè)計(jì) —— 『模型邊界劃分的模式』

而這個(gè)順序其實(shí)也是我們?cè)趯?shí)施 DDD 過(guò)程中的設(shè)計(jì)過(guò)程,而后再進(jìn)行層次化的組織,如『戰(zhàn)略設(shè)計(jì)』部分根據(jù)不同的意圖,又分為不同的合集:

  1. 保持模型的完整性,如限界上下文、上下文地圖等
  2. 精煉:核心域、通用域等
  3. 大型結(jié)構(gòu):演化秩序(Evolving Order)、系統(tǒng)隱喻等

所以從結(jié)構(gòu)上來(lái)看,《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》是一本由小而大的書(shū),閱讀難度略大,需要一定的經(jīng)驗(yàn)。

模式分類(lèi)的意圖

我們把『如何應(yīng)用設(shè)計(jì)模式看作是一個(gè)問(wèn)題域』,那么模式分類(lèi)就是在這個(gè)問(wèn)題域里的一種解決方案。

在計(jì)算機(jī)的不同的復(fù)雜領(lǐng)域里,如并行編程、架構(gòu)設(shè)計(jì)等等,它們本身是包含了大量的模式。而有了對(duì)于這些模式的進(jìn)一步分類(lèi),對(duì)于我們應(yīng)用模式會(huì)有更大的幫助 —— 至少在應(yīng)對(duì)同一個(gè)次級(jí)問(wèn)題時(shí),我們可以尋找可能的替代模式。

不過(guò)呢,多數(shù)時(shí)候,我們往往不知道的是:我們遇到的問(wèn)題是什么?

角落里的模式語(yǔ)言

如 《POSA 5》所定義的一樣:模式語(yǔ)言與具體領(lǐng)域高度相關(guān),并且能對(duì)這一類(lèi)系統(tǒng)提供具體而周全的引導(dǎo),具體包括以下幾項(xiàng):

  • 要解決的主要問(wèn)題有哪些?
  • 這些問(wèn)題應(yīng)該以什么樣的先后次序解決?
  • 解決一個(gè)給定問(wèn)題,有什么可用的替代解決方案?
  • 怎樣處理問(wèn)題之間的依賴(lài)性?

在有“周邊” 問(wèn)題存在的情況下,怎樣最有效地解決單個(gè)問(wèn)題?

簡(jiǎn)單來(lái)說(shuō),模式語(yǔ)言針對(duì)于某個(gè)特定的問(wèn)題(如并行編程)所抽象的模式,并包含了他們之間的關(guān)系等,能用于系統(tǒng)性地解決這一類(lèi)問(wèn)題。

書(shū)中還提到 了 Gerard Meszaros 的觀點(diǎn)“模式語(yǔ)言可以用來(lái)指導(dǎo)生手創(chuàng)建系統(tǒng)”。Aha,這不就是我們想要的東西嗎?作為一個(gè)進(jìn)入新領(lǐng)域的新人,我們需要這么一個(gè)模式語(yǔ)言。盡管模式語(yǔ)言可以幫助我們解決這一類(lèi)的問(wèn)題,但是它也意味著它自身需要:充分覆蓋、進(jìn)展可持續(xù)、緊密集成。依照這一系列的前提,它意味著設(shè)計(jì)這個(gè)模式語(yǔ)言的人應(yīng)該是業(yè)內(nèi)專(zhuān)家,并且模式本身應(yīng)該是不斷演進(jìn)的。

因此,當(dāng)我們把如何實(shí)施和使用模式看作是我們的問(wèn)題時(shí),那么模式語(yǔ)言解決這一類(lèi)問(wèn)題的模式。

分布式計(jì)算的模式語(yǔ)言

《POSA》系列大概是在中文世界 里,我們所能找到的最好的資料。因此,這里再次以《POSA 4》作為例子,《POSA 4》全稱(chēng)是《面向模式的軟件架構(gòu):分布式計(jì)算的模式語(yǔ)言》。

先來(lái)看圖(圖中的圈內(nèi)表示的是問(wèn)題域,連續(xù)表示的是他們的關(guān)系,每個(gè)問(wèn)題域下包含了相關(guān)的模式):

POSA Pattern Language

舉例來(lái)說(shuō)開(kāi)頭的『From Mud to Structure』(從混沌到結(jié)構(gòu))就是一個(gè)大的問(wèn)題域,對(duì)應(yīng)于這個(gè)問(wèn)題域則包含了一系列的模式,如:MVC、分層、PAC、微內(nèi)核等。同時(shí),針對(duì)于這個(gè)問(wèn)題題來(lái)說(shuō),如果我們還要數(shù)據(jù)庫(kù)訪問(wèn),那么我們從數(shù)據(jù)庫(kù)訪問(wèn)中獲得對(duì)應(yīng)的模式,以此來(lái)完善我們的設(shè)計(jì)。

然后,在我們進(jìn)入了具體的模式/問(wèn)題域之后,它還詳細(xì)介紹了如何實(shí)現(xiàn)對(duì)應(yīng)的模式。如分層:

POSA Layer

有了這系列的配合,我們便可以完善整個(gè)系統(tǒng)的設(shè)計(jì)。

微服務(wù)的模式語(yǔ)言

接著,讓我們來(lái)看看《微服務(wù)架構(gòu)設(shè)計(jì)模式》中關(guān)于微服務(wù)的架構(gòu)模式概述:

微服務(wù)模式語(yǔ)言

從上圖中,我們可以看到由 Chris Richardson 整理的這個(gè)微服務(wù)模式語(yǔ)言,對(duì)語(yǔ)言進(jìn)行了多層的分類(lèi),并指明了它們之間的關(guān)系。頗為遺憾的是這個(gè)模式語(yǔ)言只包含了關(guān)系,缺少了一些相關(guān)關(guān)系的描述。

雖然如此,但是從總體上來(lái)說(shuō),它還是能在一定程度上幫助我們?cè)O(shè)計(jì)微服務(wù)。

相關(guān)書(shū)籍:《POSA 4》、《POSA 5》、《微服務(wù)架構(gòu)設(shè)計(jì)模式》

模式的模式

從模式再模式歸類(lèi),再到模式語(yǔ)言,我們已經(jīng)有了整套的方案。最后,我們就剩下一些有意思的問(wèn)題,諸如于如何發(fā)現(xiàn)新的模式?如何對(duì)現(xiàn)有的模式進(jìn)行一些抽象。

對(duì)于『模式的模式』的理解,有助于我們更好地理解好設(shè)計(jì)模式。對(duì)于設(shè)計(jì)模式的理解之后,只需要理解其背后的模式,就不需要再去熟記每個(gè)設(shè)計(jì)模式。

所以,我們就來(lái)到了元素模式,依據(jù)的它也是來(lái)自于一本書(shū)《元素模式》。

元素模式:設(shè)計(jì)模式的模式

模式是來(lái)源于對(duì)慣用法的總結(jié),而諸如于元素模式則是對(duì)于設(shè)計(jì)模式的提取,即模式中的模式。元素模式(Elemental Design Patterns)的核心要義是一組面向?qū)ο蟮幕靖拍睢?/p>

對(duì) OO 中的設(shè)計(jì)模式進(jìn)行更細(xì)致的拆分,我們就能得到位于其背后的模式。作為其中的核心元素模式便是:創(chuàng)建對(duì)象、檢索、繼承和抽象接口。于是,如書(shū)上所說(shuō),結(jié)合這四個(gè) EDP,我們可以創(chuàng)建對(duì),并實(shí)施特定的保證,在運(yùn)行時(shí)建立自此的關(guān)聯(lián),并從一種類(lèi)型出發(fā)建立其他類(lèi)型,以及創(chuàng)建出聲明,并帶有關(guān)于未來(lái)的、未定的類(lèi)型的保證。

而我們?cè)趯?shí)施方法調(diào)用時(shí),也被抽象了四個(gè) EDP:遞歸、委托、重定向和集聚,以此構(gòu)成了設(shè)計(jì)的砌塊。

架構(gòu)模式的模式

最后就回到了我想抽象的問(wèn)題,那么架構(gòu)模式其背后的模式又有什么呢?我試著進(jìn)行了簡(jiǎn)單的拆解:

  • 契約。輸入與輸出、API 等。
  • 分割。隔離變化、明確職責(zé)等。
  • 約束。功能需求和非功能需求、性能等。
  • 封裝。接口封裝。
  • 協(xié)作。協(xié)作風(fēng)格等
  • ……

當(dāng)然了,我還需要他們進(jìn)行重新命名,以構(gòu)建在架構(gòu)模式領(lǐng)域的統(tǒng)一語(yǔ)言。

其它

盡管,它有些復(fù)雜,但是依舊很有意思。

相關(guān)資料

《元素模式》

《設(shè)計(jì)模式》 -> 《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》

《POSA 4》 -> 《面向模式的軟件架構(gòu),卷 4:分布式計(jì)算的模式語(yǔ)言》

《POSA 5》 -> 《面向模式的軟件架構(gòu),卷 5:模式與模式語(yǔ)言》

 

《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》 -> 《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件核心復(fù)雜性應(yīng)對(duì)之道》

本文轉(zhuǎn)載自微信公眾號(hào)「 phodal」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 phodal公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: phodal
相關(guān)推薦

2020-05-25 10:20:19

享元模式場(chǎng)景

2024-02-27 11:59:12

享元模式對(duì)象

2012-08-30 09:07:33

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

2024-04-12 12:10:18

Python設(shè)計(jì)模式開(kāi)發(fā)

2021-02-01 10:01:58

設(shè)計(jì)模式 Java單例模式

2020-08-21 07:23:50

工廠模式設(shè)計(jì)

2020-11-04 08:54:54

狀態(tài)模式

2023-04-10 09:20:13

設(shè)計(jì)模式訪客模式

2013-11-26 16:09:34

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

2020-10-23 09:40:26

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

2020-11-03 13:05:18

命令模式

2022-01-12 13:33:25

工廠模式設(shè)計(jì)

2023-05-04 08:47:31

命令模式抽象接口

2021-03-06 22:50:58

設(shè)計(jì)模式抽象

2023-03-06 08:46:12

2023-11-02 21:11:11

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

2015-09-08 13:39:10

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

2020-10-28 11:56:47

橋接模式

2020-11-09 08:20:33

解釋器模式

2021-05-18 08:52:31

Prototype 原型模式設(shè)計(jì)模式
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 久久久久久91香蕉国产 | 天天拍天天色 | 中文字幕欧美日韩 | 男女羞羞视频在线免费观看 | 久久精品中文 | 精品欧美黑人一区二区三区 | 国产欧美一区二区三区久久手机版 | 成人三级影院 | 老司机免费视频 | 美女视频网站久久 | 在线观看亚洲欧美 | 亚洲一区二区三区免费在线 | 成人av鲁丝片一区二区小说 | 欧美一级黄色片 | 国产精品视频一区二区三区不卡 | 久久久不卡网国产精品一区 | 91高清在线观看 | 亚洲国产成人精品久久久国产成人一区 | 欧美精品一区二区三区蜜桃视频 | 亚洲一区二区三区四区五区中文 | 精品麻豆剧传媒av国产九九九 | 亚洲激情在线观看 | 激情婷婷成人 | 91麻豆精品国产91久久久更新资源速度超快 | 美女131mm久久爽爽免费 | 色婷婷精品久久二区二区蜜臂av | 狠狠狠干 | 狠狠狠干 | 久久久久成人精品 | 国产精品日韩一区二区 | 羞羞视频免费观看入口 | 国产成人综合av | 97精品超碰一区二区三区 | aaaa网站 | 日本午夜免费福利视频 | 老外黄色一级片 | 992tv人人草 久久精品超碰 | 久久久久久毛片免费观看 | 夜夜骑首页 | 天色综合网 | 9porny九色视频自拍 |