消極架構
這是來自Michael Feathers的一篇著名文章,Negative Architecture消極架構已經被廣泛傳播。下面結合中國老子思想解釋與翻譯如下,從“無與有”角度理解“架構不做什麼”反而是更好的選擇:
你可能以前已經看過這張照片,這是人們用來展示感知如何運作的影象;你要麼看到兩張臉看著對方(黑色部分);要麼看到一個花瓶(白色部分)。在格式塔心理學的術語中,黑色部分成為人物輪廓(兩張臉),而把白色部分看成花瓶的人則會把黑色部分看成是白色花瓶所在的背景。我們可以在花瓶和麵孔之間切換,但我們不能同時看到它們。我們大腦自動告訴我們這是人物輪廓,這是我們最先感知的物件,認識到花瓶和背景屬於另外一種觀察方式。
由ofollow,noindex" target="_blank">Betty Edwards 撰寫5GSYXU4" rel="nofollow,noindex" target="_blank">的“在大腦右側繪圖 ”一書 利用這種背景知識幫助人們更好地繪畫。她的一個練習是故意不忘記的人的輪廓,當學生正在畫一個人或一把椅子,她告訴學生繪製這些輪廓時要忘記他們是什麼,這樣,你將繪製你看到的純粹外形,不讓你的大腦告訴你它是一個人或一個椅子等物件,因為當你的大腦對其進行分類時,它總是會開始美化,我們知道一個人什麼樣子,大部分是根據記憶印象而不是我們實際看到的這個人什麼樣。(banq注:我們看到一張桌子為什麼知道它是桌子?我們僅僅看到桌子的一個面就是能判斷?桌子的其他三個面其實靠意向想象。)
在軟體中也發生了類似的事情。我們設計的任何系統都由部件組成 - 元件,框架,庫或服務。無論我們製作它們還是使用它們都無關緊要。這些部件都對我們是有用的(banq注:有以為利 有用是王道!?),這就類似於上面的人的輪廓。
那麼換個角度看,什麼是花瓶的背景呢?背景是這個軟體不做什麼的列表(banq注:“無”的列表,無與有的區別)。
函式程式設計的一個很好的例子是Haskell中的IO Monad。應用程式中的任何程式碼或者在IO Monad中 - 在這種情況下它可以執行IO - 或者在程式碼之外的某個地方(這樣你的程式碼就變得純粹),這樣你可以保證你的程式碼就不會做IO(委託給IO Monad了),這種保證很有用,當你檢視這段程式碼時,你就不會太費神,或過於擔心(因為他不會做IO,你就不會看到做IO的程式碼)。
這些保證構成了一種消極的架構: 它是一系列你知道在系統的各個部分都不會發生的事情。(banq注:無以為用=無用嗎?錯了,守住“無”讓你事倍功半)
因為,關於“能做什麼”的潛在的列表是無限的,但這並不能阻止人們認為“能做什麼”這種觀點是有用的。(banq注:有以為利=有就有利害得失,更多人注重“有”,擁有 金錢 名利 功名,這些都是無限的,窮其一生你能擁有一切嗎?)
如果您在系統中某個地方使用特定的永續性技術,那麼是否能夠說它僅應該在這裡使用,而不用在系統其他地方使用?其他技術也是如此。
知道什麼是"不能做"的事情可以減少陷阱的數量,它將架構置於堅實的基礎之上。
(banq注:無勝於有!)