剛出道的架構(gòu)師經(jīng)常評(píng)論說,他們對(duì)這份工作在技術(shù)知識(shí)和經(jīng)驗(yàn)之外的多樣性感到多么驚訝,這使得他們能夠從一開始就進(jìn)入架構(gòu)師的角色。特別是,有效的溝通對(duì)于架構(gòu)師的成功至關(guān)重要。無論一個(gè)架構(gòu)師的技術(shù)思想有多高明,如果他們不能說服管理者為他們提供資金,也不能說服開發(fā)人員來進(jìn)行構(gòu)建,那么他們的聰明才智就永遠(yuǎn)不會(huì)顯現(xiàn)出來。
繪制和演示架構(gòu)是架構(gòu)師的兩個(gè)關(guān)鍵軟技能。雖然每一個(gè)主題在整本書中都有提及,但我們會(huì)對(duì)每一個(gè)主題進(jìn)行強(qiáng)調(diào)。
這兩個(gè)主題出現(xiàn)在一起是因?yàn)樗鼈冇幸恍┫嗨频奶卣鳎好恳粋€(gè)都是架構(gòu)視覺的重要視覺表現(xiàn)形式,使用不同的媒體來演示。然而,表征一致性是一個(gè)將兩者聯(lián)系在一起的概念。
當(dāng)形象地描述一個(gè)架構(gòu)時(shí),創(chuàng)建者通常必須展示不同的架構(gòu)視圖。例如,架構(gòu)師可能會(huì)展示整個(gè)架構(gòu)拓?fù)涞母攀?,然后深入到各個(gè)部分以深入研究設(shè)計(jì)細(xì)節(jié)。但是,如果架構(gòu)師顯示了一個(gè)部分,卻沒有指出它在整個(gè)架構(gòu)中的位置,這會(huì)使查看者感到困惑。表征一致性是指在更改視圖之前,始終以圖表或表達(dá)的形式顯示架構(gòu)各部分之間的關(guān)系的實(shí)踐。例如,如果一個(gè)架構(gòu)師想要描述插件在Silicon Sandwiches解決方案中如何相互關(guān)聯(lián)的細(xì)節(jié),那么該架構(gòu)將顯示整個(gè)拓?fù)浣Y(jié)構(gòu),然后深入到插件結(jié)構(gòu)中,向查看者顯示它們之間的關(guān)系;一個(gè)示例如圖21-1所示。

精心地使用表征一致性可以確保查看者理解所呈現(xiàn)項(xiàng)目的范圍,消除常見的混淆。
繪圖
架構(gòu)的拓?fù)浣Y(jié)構(gòu)總是引起架構(gòu)師和開發(fā)人員的興趣,因?yàn)樗蹲降搅私Y(jié)構(gòu)是如何組合在一起的,并在整個(gè)團(tuán)隊(duì)中形成了有價(jià)值的共同理解。因此,架構(gòu)師應(yīng)該磨練他們的繪圖技巧如剃刀般銳利。
工具
面向架構(gòu)師的當(dāng)代繪圖工具非常強(qiáng)大,架構(gòu)師應(yīng)該深入學(xué)習(xí)他們選擇的工具。然而,在使用一個(gè)好的工具之前,不要忽略低精度的工件,尤其是在設(shè)計(jì)過程的早期。早期構(gòu)建非常短暫的設(shè)計(jì)工件可以防止架構(gòu)師過度依附于他們所創(chuàng)建的東西,這種反模式我們稱之為“非理性工件依戀”(Irrational Artifact Attachment)反模式。
非理性工件依戀
…是一個(gè)人對(duì)某件藝術(shù)品的非理性依戀與它產(chǎn)生的時(shí)間之間的比例關(guān)系。如果一個(gè)架構(gòu)師使用像Visio這樣的工具需要花費(fèi)兩個(gè)小時(shí)來創(chuàng)建一個(gè)漂亮的圖表,那么他們對(duì)這個(gè)工件的非理性的依戀與投入的時(shí)間大致成正比,這也意味著他們將更多地依戀一個(gè)四小時(shí)的圖表而不是兩小時(shí)的圖表。
敏捷軟件開發(fā)中使用的低儀式方法的好處之一是圍繞著采用盡可能少的儀式來創(chuàng)建適時(shí)的工件(這有助于解釋許多敏捷專家致力于使用索引卡和便箋)。使用低技術(shù)工具可以讓團(tuán)隊(duì)成員扔掉不正確的東西,讓他們自由地進(jìn)行實(shí)驗(yàn),并通過修改、協(xié)作和討論來揭示工件的真實(shí)本質(zhì)。
一個(gè)架構(gòu)師最喜歡的變化在手機(jī)上的白板照片(連同不可避免的“不要?jiǎng)h除!”命令)。使用連接在投影儀上的平板電腦,而不是白板。這有幾個(gè)優(yōu)點(diǎn)。首先,平板電腦擁有無限的畫布,可以容納團(tuán)隊(duì)可能需要的任意多幅圖紙。第二,它允許復(fù)制/粘貼“如果…怎么辦”場(chǎng)景,當(dāng)在白板上完成時(shí),這些場(chǎng)景會(huì)掩蓋原始場(chǎng)景。第三,在平板電腦上拍攝的圖像已經(jīng)數(shù)字化了,而且不會(huì)不可避免地出現(xiàn)手機(jī)白板照片上的眩光。
最后,架構(gòu)師需要用一個(gè)花哨的工具創(chuàng)建漂亮的圖表,但要確保團(tuán)隊(duì)已經(jīng)對(duì)設(shè)計(jì)進(jìn)行了充分的迭代,以便投入時(shí)間來捕獲一些東西。
強(qiáng)大的工具可以在每個(gè)平臺(tái)上創(chuàng)建圖表。雖然我們沒有必要倡導(dǎo)一個(gè)工具勝過另一個(gè)(對(duì)于本書中的所有圖表,我們都很高興地使用了OmniGraffle),架構(gòu)師至少應(yīng)該找到這些基本功能特性:
層次
繪圖工具通常支持分層,架構(gòu)師應(yīng)該好好學(xué)習(xí)這一方面的技巧。一個(gè)層允許繪圖者邏輯地將一組項(xiàng)目鏈接在一起,以啟用隱藏/顯示單個(gè)層。通過使用層,架構(gòu)師可以構(gòu)建一個(gè)全面的圖,但是在不需要的時(shí)候隱藏大量的細(xì)節(jié)。使用層還允許架構(gòu)師為以后的演示逐步構(gòu)建畫面(請(qǐng)參閱“增量構(gòu)建”)。
模板
模板允許架構(gòu)師建立一個(gè)公共視覺組件庫,通常是其他基本形狀的組合。例如,在這本書中,讀者看到了像微服務(wù)這樣的東西的標(biāo)準(zhǔn)圖片,它們作為一個(gè)單獨(dú)的項(xiàng)目存在于作者的模板中。為組織內(nèi)的公共模式和工件構(gòu)建模板可以在架構(gòu)圖中保持一致性,并允許架構(gòu)師快速構(gòu)建新的圖。
磁鐵
許多繪圖工具在繪制形狀之間的線時(shí)提供協(xié)助。磁鐵代表了這些形狀上的位置上直線自動(dòng)連接,提供自動(dòng)對(duì)齊和其他視覺細(xì)節(jié)。有些工具允許架構(gòu)師添加更多的磁鐵或創(chuàng)建自己的磁鐵,以自定義連接在其架構(gòu)圖中的顯示。
除了這些特定的有用特性之外,該工具當(dāng)然還應(yīng)該支持線條、顏色和其他視覺工件,以及以多種格式導(dǎo)出的能力。
繪圖標(biāo)準(zhǔn):UML、C4和ArchiMate
軟件中的技術(shù)圖有幾種正式的標(biāo)準(zhǔn)。
UML
統(tǒng)一建模語言(UML)是一個(gè)標(biāo)準(zhǔn),它統(tǒng)一了20世紀(jì)80年代共存的三種相互競(jìng)爭(zhēng)的設(shè)計(jì)理念。它本應(yīng)是世界上最好的,但與委員會(huì)設(shè)計(jì)的許多東西一樣,未能在授權(quán)使用它的組織之外產(chǎn)生太大影響。
架構(gòu)師和開發(fā)人員仍然使用UML類圖和序列圖來溝通結(jié)構(gòu)和工作流,但是大多數(shù)其他UML圖類型已經(jīng)被棄用。
C4
C4是Simon Brown開發(fā)的一種圖表技術(shù),用于解決UML中的缺陷并使其方法現(xiàn)代化。C4中的四個(gè)C如下:
Context
表示系統(tǒng)的整個(gè)上下文,包括用戶角色和外部依賴項(xiàng)。
Container
架構(gòu)中的物理(通常是邏輯)部署邊界和容器。這種觀點(diǎn)為運(yùn)營和架構(gòu)師形成了一個(gè)很好的集合點(diǎn)。
Component
系統(tǒng)的組件視圖;這與架構(gòu)師的系統(tǒng)視圖最為一致。
Class
C4使用了UML中相同樣式的類圖,這些類圖是有效的,因此不需要替換它們。
如果一家公司尋求在圖表技術(shù)上實(shí)現(xiàn)標(biāo)準(zhǔn)化,C4提供了一個(gè)很好的替代方案。然而,與所有技術(shù)圖表工具一樣,它也無法表達(dá)出架構(gòu)可能進(jìn)行的各種設(shè)計(jì)。C4最適合于容器和組件關(guān)系可能不同的單體架構(gòu),但不太適合分布式架構(gòu),例如微服務(wù)。
ARCHIMATE
ArchiMate(Arch*itecture-Ani*mate的混合體)是一種開源企業(yè)架構(gòu)建模語言,用于支持業(yè)務(wù)領(lǐng)域內(nèi)和跨業(yè)務(wù)領(lǐng)域的架構(gòu)描述、分析和可視化。ArchiMate是開放組織的一個(gè)技術(shù)標(biāo)準(zhǔn),它為企業(yè)生態(tài)系統(tǒng)提供了一種更輕量級(jí)的建模語言。ArchiMate的目標(biāo)是“盡可能小”,而不是覆蓋所有邊緣案例場(chǎng)景。因此,它已成為許多架構(gòu)師的熱門選擇。
圖表準(zhǔn)則
無論架構(gòu)師是使用自身的還是正式的建模語言,他們?cè)趧?chuàng)建圖表時(shí)都應(yīng)該構(gòu)建自己的風(fēng)格,并且可以隨意借用他們認(rèn)為特別有效的表示方法。以下是創(chuàng)建技術(shù)圖表時(shí)使用的一些通用準(zhǔn)則。
標(biāo)題
確保圖表中的所有元素都有標(biāo)題或是觀眾熟知的。使用旋轉(zhuǎn)和其他效果,使標(biāo)題與他們相關(guān)聯(lián)的元素綁定在一起,并有效地利用空間。
線條
線條應(yīng)該足夠粗,以便能夠看清楚。如果線條表示信息流,則使用箭頭表示方向或雙向信息流。不同類型的箭頭可能表示不同的語義,但架構(gòu)師應(yīng)該保持一致。
通常,架構(gòu)圖中存在的少數(shù)標(biāo)準(zhǔn)之一是實(shí)線表示同步通信,虛線表示異步通信。
形狀
雖然所描述的形式化建模語言都有標(biāo)準(zhǔn)形狀,但在整個(gè)軟件開發(fā)世界中并不普遍存在標(biāo)準(zhǔn)形狀。因此,每個(gè)架構(gòu)師都傾向于創(chuàng)建自己的標(biāo)準(zhǔn)形狀集,有時(shí)將這些形狀分布在整個(gè)組織中,以創(chuàng)建標(biāo)準(zhǔn)語言。我們傾向于使用三維框來表示可部署工件,使用矩形來表示節(jié)點(diǎn),但除此之外,我們沒有任何特定的要訣。
標(biāo)簽
架構(gòu)師應(yīng)該給圖表中的每一項(xiàng)都加上標(biāo)簽,特別是當(dāng)讀者有可能產(chǎn)生歧義時(shí)。
顏色
架構(gòu)師多年來不經(jīng)常使用的色彩,書籍用黑白印刷,所以建筑師和開發(fā)人員習(xí)慣了單色繪圖。雖然我們?nèi)匀幌矚g單色,但我們使用顏色有助于區(qū)分不同的工件。例如,在“通信”中討論微服務(wù)通信策略時(shí),我們使用顏色表示兩個(gè)不同的微服務(wù)參與協(xié)調(diào),而不是同一服務(wù)的兩個(gè)實(shí)例,如圖21-2所示。

關(guān)鍵字
如果形狀因任何原因而不明確,在圖表上添加關(guān)鍵字以明確指出每個(gè)形狀所代表的內(nèi)容。
演示
現(xiàn)代架構(gòu)師需要的另一項(xiàng)軟技能是使用PowerPoint和Keynote等工具進(jìn)行有效演示的能力。這些工具是現(xiàn)代組織的通用語言,組織里的人都期望能夠勝任地使用這些工具。不幸的是,與文字處理器和電子表格不同,似乎沒有人花太多時(shí)間研究如何很好地使用這些工具。
Neal,這本書的合著者之一,幾年前寫了一本書,名為《Presentation Patterns(Addison-Wesley Professional)》,講述了如何采用軟件世界中常見的模式/反模式方法,并將其應(yīng)用于技術(shù)演示。
演講模式對(duì)創(chuàng)建一個(gè)文檔和為某個(gè)案例作一場(chǎng)演示之間的根本區(qū)別進(jìn)行了重要的觀察,區(qū)別之處就是時(shí)間。在一場(chǎng)演示中,演示者控制一個(gè)想法展開的速度,而文檔的話是讀者來控制這個(gè)速度。因此,架構(gòu)師在他們選擇的演示工具中可以學(xué)到的最重要的技能之一就是如何控制時(shí)間。
控制時(shí)間
演示工具提供兩種方式來控制幻燈片上的時(shí)間:過渡和動(dòng)畫。過渡控制在幻燈片之間的轉(zhuǎn)換,動(dòng)畫允許設(shè)計(jì)者在幻燈片中創(chuàng)建移動(dòng)。通常,演示工具只允許每張幻燈片進(jìn)行一次轉(zhuǎn)換,但每個(gè)元素可以有一組動(dòng)畫:飛入(出現(xiàn))、淡出(消失)和動(dòng)作(如移動(dòng)、縮放和其他動(dòng)態(tài)行為)。
雖然工具提供了各種引人注目的效果,如鐵砧從上面掉下,架構(gòu)師使用過渡和動(dòng)畫來隱藏幻燈片之間的邊界。一種常見的反模式在演示模式中被稱為Cookie-Cuter,它指出創(chuàng)意沒有預(yù)先確定的字?jǐn)?shù),因此,設(shè)計(jì)者不應(yīng)該人為地填充內(nèi)容,使其看起來像是填滿幻燈片。同樣,許多想法都比一張幻燈片大。通過使用過渡和動(dòng)畫的微妙組合(如“溶解”),演示者可以隱藏單獨(dú)的幻燈片邊界,將一組幻燈片縫合在一起以講述單個(gè)故事。為了表明一個(gè)想法的結(jié)束,演示者應(yīng)該使用一個(gè)明顯不同的過渡(如門或立方體)來提供一個(gè)視覺線索,表明他們正在轉(zhuǎn)移到一個(gè)不同的主題上。
增量構(gòu)建
《演示模式》一書將彈痕累累的尸體稱為公司演示的常見反模式,每張幻燈片本質(zhì)上都是演講者的筆記,投影給所有人看。大多數(shù)讀者都有這樣一種痛苦的經(jīng)歷:在演示過程中,看到一張充滿文字的幻燈片出現(xiàn),然后閱讀整張幻燈片(因?yàn)闆]有人能忍住當(dāng)它一出現(xiàn)時(shí)就去讀完全部?jī)?nèi)容),只是在接下來的10分鐘里,主持人慢慢地向觀眾朗讀這些子彈。難怪這么多公司的演講都很枯燥!
在作演示時(shí),演講者有兩個(gè)信息渠道:口頭和視覺。通過在幻燈片上放置太多的文本,然后說本質(zhì)上相同的話,演講者是在使其中一個(gè)信息渠道過載而另一個(gè)渠道卻缺乏信息。解決這個(gè)問題的更好方法是在幻燈片上進(jìn)行增量構(gòu)建,根據(jù)需要構(gòu)建(希望是圖形化的)信息,而不是一次構(gòu)建所有信息。
例如,假設(shè)一個(gè)架構(gòu)師創(chuàng)建了一個(gè)演示來解釋使用特性分支的問題,并希望討論使分支存在太長(zhǎng)時(shí)間的負(fù)面后果??紤]圖21-3所示的圖形幻燈片。

在圖21-3中,如果演示者立即展示整個(gè)幻燈片,觀眾可以看到在接近結(jié)尾時(shí)發(fā)生了一些不好的事情,但他們必須等待到演示者的解釋才能意識(shí)到這一點(diǎn)。
相反,架構(gòu)師在顯示幻燈片時(shí)應(yīng)該使用相同的圖像但遮蓋某些部分(使用無邊框白框),并依次展示其中一部分(通過在覆蓋框上執(zhí)行淡出),如圖21-4所示。

在圖21-4中,演講者仍然有機(jī)會(huì)保持一些懸念,使演講本身更有趣。
將動(dòng)畫和過渡與增量構(gòu)建結(jié)合使用,可以讓演示者進(jìn)行更具吸引力和娛樂性的演示。
信息組與演示文稿
一些架構(gòu)師使用PowerPoint和Keynote等工具構(gòu)建幻燈片,但從未實(shí)際演示過它們。相反,它們像雜志文章一樣通過電子郵件發(fā)送,每個(gè)人都按照自己的節(jié)奏閱讀。信息組是一種幻燈片組,它不是用來投影的,而是用圖形化的方式總結(jié)信息,本質(zhì)上是使用一個(gè)演示工具作為桌面發(fā)布包。
這兩種媒體的區(qū)別在于內(nèi)容的全面性以及過渡和動(dòng)畫的使用。如果有人要像雜志文章一樣翻閱幻燈片,幻燈片的作者不需要添加任何時(shí)間元素。信息組和演示文稿之間的另一個(gè)關(guān)鍵區(qū)別是材料的數(shù)量。因?yàn)樾畔⒔M意味著是獨(dú)立的,所以它們包含了創(chuàng)建者想要傳達(dá)的所有信息。在做一場(chǎng)演示時(shí),幻燈片(有目的地)意味著是演示的一半,另一半是站在那里說話的人!
幻燈片是故事的一半
演示者經(jīng)常犯的一個(gè)錯(cuò)誤是將演示文稿的全部?jī)?nèi)容構(gòu)建到幻燈片中。但是,如果幻燈片很全面,演示者應(yīng)該騰出時(shí)間讓每個(gè)人都坐著看一個(gè)演示文稿,然后把它通過電子郵件發(fā)給每個(gè)人!當(dāng)演示者能夠更有力地表達(dá)重要觀點(diǎn)時(shí),他們會(huì)犯在幻燈片中添加過多內(nèi)容的錯(cuò)誤。請(qǐng)記住,演示者有兩個(gè)信息渠道,因此戰(zhàn)略性地使用它們可以增加信息的沖擊力。一個(gè)很好的例子就是戰(zhàn)略上使用隱身術(shù)。
隱身術(shù)
隱身術(shù)是一種簡(jiǎn)單的模式,演示者在演示文稿中插入一張空白的黑色幻燈片,以便將注意力重新集中到說話者身上。如果某人有兩個(gè)信息頻道(幻燈片和演講者)并關(guān)閉其中一個(gè)頻道(幻燈片),則會(huì)自動(dòng)為演講者增加更多的重視。因此,如果演示者想表達(dá)自己的觀點(diǎn),請(qǐng)插入一張空白幻燈片,在座的每個(gè)人都會(huì)將注意力重新集中到演講者身上,因?yàn)樗麄儸F(xiàn)在是房間里唯一有趣的東西。
學(xué)習(xí)演示工具的基礎(chǔ)知識(shí)和一些使演示變得更好的技術(shù)是架構(gòu)師技能集的一個(gè)很好的補(bǔ)充。如果一個(gè)架構(gòu)師有一個(gè)偉大的想法,但卻不能找到一種有效的方法來表達(dá)它,那么他們將永遠(yuǎn)沒有機(jī)會(huì)實(shí)現(xiàn)這個(gè)愿景。架構(gòu)需要協(xié)作;為了獲得協(xié)作者,架構(gòu)師必須說服人們認(rèn)可他們的愿景?,F(xiàn)代公司的肥皂盒是演示工具,所以很值得學(xué)習(xí)如何使用它們。