官术网_书友最值得收藏!

什么是反模式

反模式是描述經(jīng)驗的一種方式。作為一種概念,反模式最初是由威廉·布朗(William J. Brown)與他的合著者在《反模式:危機中軟件、架構(gòu)和項目的重構(gòu)》(1998)中命名并描述的。它是對一個經(jīng)常發(fā)生問題的解決方案的描述,在這個解決方案中,結(jié)果大于成效。

本書中的反模式是由于引導師不知道如何做得更好或者沒有時間或機會去做正確的事情而造成的。也許這個解決方案曾經(jīng)對另一個小組的引導師有效,因為小組成員有不一樣的溝通方式或是彼此間更為了解,但它在新的背景中卻意外地“翻車”了。

我通過給大家舉兩個反模式的例子來介紹反模式。第一個早期的例子導致了一場舉世聞名的大災難。1912年4月14日深夜,皇家郵輪泰坦尼克號撞上了冰山。4月15日凌晨,它沉沒了,船上2224名乘客和船員中有1500多人喪生。要想了解這艘船沉沒的原因,就必須研究大量的小細節(jié),這些小細節(jié)共同導致了這場災難。我選擇關(guān)注的是一種可以稱之為“遵從不知情上級的命令”的反模式。如果在維基百科上搜索“上級命令”,會找到以下內(nèi)容:“上級命令,通常被稱為‘紐倫堡抗辯’‘合法命令’‘只是服從命令’或者一個德語短語Befehl ist Befehl(命令就是命令),是指一個人,不管是軍隊、執(zhí)法部門、消防部隊的成員或者是平民,在法庭上對服從上級軍官或官員命令的行為不被追究罪責的抗辯。”這種反模式已經(jīng)在許多地方和時間被確認過,而且,也恰好發(fā)生在泰坦尼克號的故事里。

泰坦尼克號上的兩名無線電臺操作員為馬可尼無線電報公司工作。接線員的任務是將乘客的信息傳遞到他們在陸地上的朋友和家人那里,以展示馬可尼公司提供的無線通信服務。另外一個因素是,公司會為每一條乘客發(fā)出或收到的信息向他們兩人付費,因此他們的收入多少是依賴于優(yōu)先保證乘客的通信,而不是船對船的禮節(jié)性通信。幾乎從航行一開始,他們就收到了關(guān)于冰山的警告,并將大部分信息傳遞給了駕駛艙。不幸的是,由于無線電操作員專注于執(zhí)行他們公司的命令,有一些發(fā)給泰坦尼克號的信息丟失了。因為他們的上級是無線公司的老板,而不是船長。

這就解釋了為什么當天晚上9點40分,與泰坦尼克號在同一水域航行的梅薩巴號發(fā)出了浮冰警告,但這條信息卻一直沒有被傳到駕駛艙。晚上10點55分,附近的另一艘游輪加利福尼亞人號發(fā)來消息,說它被冰層包圍后停了下來,但泰坦尼克號上的一位無線電操作員責備加利福尼亞人號打擾到了自己,因為他當時正忙著處理乘客的信息。

結(jié)果是,船長沒有得到浮冰情況比預期更糟的警告,所以他繼續(xù)全速航行。船一直沿著預訂航線前進,直到晚上11點40分,當瞭望臺發(fā)現(xiàn)一座冰山時,駕駛艙的工作人員才開始給泰坦尼克號轉(zhuǎn)向,但由于它是一艘高速航行的巨輪,一切都為時已晚。泰坦尼克號的船舷沿著冰山擦過,船身破裂。我們都知道故事的結(jié)局是什么。

通常情況下,一個背景中的模式可能是另一個背景中的反模式。例如,在泰坦尼克號的案例中,無線電操作員有義務服從上級的命令。然而,如果他們知道背景發(fā)生了變化,船正面臨著緊急情況,他們就不會盲目地服從命令,這樣做會構(gòu)成一種反模式。

隨著技術(shù)和流程的改變及改進,模式也可能隨著時間的推移變成反模式。當一個好的解決方案被一個更好的解決方案取代時,對于一個反復出現(xiàn)的問題,原本的解決方案可能會被視為一個糟糕的解決方案。

第二個例子是微服務模式,它是(Fowler & Lewis 2014)所描述的一種設計,通過這種設計,開發(fā)人員創(chuàng)建一組小型服務,每個服務都有自己的功能。在軟件架構(gòu)中,微服務模式被證明是可維護的、靈活的和彈性的,它被譽為是自切片面包(2)(和設計模式)以來最好的東西。該模式促進了可獨立部署、可復用組件的開發(fā),使開發(fā)人員能夠創(chuàng)建使用微服務構(gòu)建的可擴展系統(tǒng)。這些系統(tǒng)的成功導致了許多單片系統(tǒng)向微服務架構(gòu)的轉(zhuǎn)變。

之后發(fā)生的事情,就是我們在使用模式時可能會遇到的情況:模式被濫用了。如果組織缺乏維護系統(tǒng)所需的專業(yè)知識,缺乏從這種實現(xiàn)中受益的領域或者服務之間的邊界定義不明確,那么微服務就可能會產(chǎn)生負面影響。微服務架構(gòu)演進的方向之一就是復雜性增加,在錯誤的環(huán)境中,系統(tǒng)會變成一個更復雜的龐然大物,而不是一套更小、定義明確的微服務。所有預期的成效(比如可擴展性、獨立性和可復用性)都會丟失,如果在錯誤的背景中使用,微服務模式就會變成反模式。應用模式的背景非常重要,而且總會有一個不適用于該背景的模式解決方案,最終導致反模式。(3)

模式在錯誤的背景中應用就會變成反模式

一個正確描述的反模式包含一個總體描述、一個導致癥狀的因素及其識別方式列表、原解決方案的結(jié)果以及一個重構(gòu)方案(用來描述如何解決當前問題或者至少如何在下一次做得更好)。

所有的模式都有其結(jié)果。在某些情況下,使用特定的模式是一個好辦法,而在其他情況下,相同的模式卻會成為反模式。當你想要使用某個模式時,理解背景相關(guān)的含義是很重要的。這有助于你了解全貌,包括反模式解決方案的副作用。與模式一樣,反模式不是某個人發(fā)明的抽象理論,而是他/她在經(jīng)常重復出現(xiàn)的不良解決方案中看到的一系列原因和影響。

你應該讀一讀這本書,這樣當反模式在回顧活動中發(fā)生時(甚至可能發(fā)生之前),你就能知道如何識別它們。我寫《回顧活動引導:24個反模式與重構(gòu)實踐》這本書的目的就是幫助你避免重蹈我的覆轍。

作為一個有經(jīng)驗的回顧活動引導師,你可能注意到你已經(jīng)知道了很多這樣的模式以及如何處理它們。這本書的另一個優(yōu)勢在于,現(xiàn)在你擁有了一個可以與他人進行討論的詞匯表,而且當你發(fā)現(xiàn)自己處于某種反模式時,可能會更容易將其識別出來。如果你和你的同事分享這些模式,它們令人印象深刻的名字可以幫助你意識到你或你的團隊是在何時陷入了幸運大轉(zhuǎn)盤(參見第1章)或是無視最高指導原則(參見第2章)。

最后,你還可以以Schadenfreude (4)為目的來讀這本書,因為當最早的反模式著作《反模式:危機中軟件、架構(gòu)和項目的重構(gòu)》(Brownet al,1998)出版時,其中一位作者在一次演講中說:“(自己的)幸福雖好,但是,別人的不幸更佳。”

主站蜘蛛池模板: 刚察县| 霍山县| 防城港市| 南阳市| 房产| 芒康县| 洛川县| 竹山县| 措勤县| 高淳县| 长沙市| 泰来县| 丹江口市| 修武县| 柳河县| 西贡区| 石屏县| 龙山县| 定襄县| 海南省| 奉节县| 仲巴县| 哈巴河县| 库尔勒市| 佛坪县| 寿宁县| 浦县| 宝兴县| 原阳县| 柞水县| 墨玉县| 襄汾县| 科技| 阳新县| 民乐县| 新闻| 三门县| 涞源县| 河间市| 黑水县| 湖北省|