神奇的7+/-2法則:在沒有充分理由的情況下不要讓程式設計師的大腦超載 - javiercasas

banq發表於2019-08-13

心理學中有一篇很古老但非常重要的論文:喬治·米勒的著作《神奇的數字 7 +/- 2;我們資訊加工能力的侷限》,它測量了大腦處理資訊的極限,並給出一個數字:人腦中可以同時晃動5到9個概念。在不得重複練習的情形下(如看電視字幕),在短時記憶內,一般人平均只能記下 7 個專案(如 7 位數字、7 個地名),是故從電話簿上查到電話號碼後,待要撥號時往往會不復記憶;短時記憶的量雖不能增加,但此 7 個事項的性質則可經由心理運作使之擴大。

他的主要觀點之一就是資訊編碼的概念。他認為編碼最簡單的方式是將輸入資訊歸類,然後加以命名,最後儲存的是這個命名而非輸入資訊本身。編碼是一個主動的轉換過程,對經驗並非嚴格地匹配,因此編碼以及之後的解碼往往會導致錯誤發生。

對於我們這些軟體開發人員來說,有兩個對我們來說非常重要的含義:

  • 簡單的構造(模型,實現,設計,模式......)更好,因為它們需要較少的概念來描述它們。
  • 構造良好的抽象具有非常少的特殊規則並且沒有驚喜地構成更好,因為它們需要較少的概念來描述它們。

反面例子:Abstract Factory pattern抽象工廠的定義:

A Factory that is Abstractwhich implements a createProductAmethod that uses new to <<construct>>a ProductA1 that has a ProductA<<interface>>.

一個工廠是一個抽象, 它實現了一個createProductA方法,這個方法使用使用ProductA介面構造new一個的ProductA。

神奇的7+/-2法則:在沒有充分理由的情況下不要讓程式設計師的大腦超載 - javiercasas

這個定義中涉及概念:

  • AbstractFactory介面
  • <<creates>>動作
  • Factory1(or ConcreteFactory)
  • ProductA 和ProductB介面
  • ProductA1和ProductB1類
  • new關鍵字
  • 抽象工廠圖
  • 工廠序列圖

簡單的構造

正如霍爾所說:

構建軟體設計有兩種方法:一種方法是使其變得如此簡單以至於顯然沒有缺陷,另一種方法是使其變得如此複雜以至於沒有明顯的缺陷。

不幸的是,他還補充道:

第一種方法要困難得多。

在軟體開發中,新增另一個模組,另一個類,越來越多的程式碼非常容易。另一方面,製作儘可能簡單的東西實際上非常困難。它需要尋找潛在的模式和行為,並要求消除不適合的東西。但是,最終,它會更好,因為它允許您使用較少的概念和較少的智力來描述它,這意味著您可以專注於更大的整體而不是細節。

對於抽象工廠只需要兩句描述:

兩個操作:

  • 首先從介面ProductA獲取物件
  • 然後從介面ProductB獲取物件

程式碼如下:

AbstractFactory myFactory = new Factory1();
ProductA myProduct = myFactory.createProductA();
AbstractFactory somethingDifferent = new SomethingDifferentFactory();
SomethingDifferent result = somethingDifferent.fabricate(myProduct);
return result

良好的組合性

當你具有良好的組合性時,你只需將這些部分連線起來構建一個整體,而不必擔心這些部分會以意想不到的方式在它們之間相互作用。(banq注參考構造定律)

整體是各部分的精確總和,僅此而已。

不幸的是,很難檢測到良好組合性的語義,因為我們的開發人員習慣於那些不構成的東西,我們只是不知道組合良好的東西的“形狀”。(banq注:這個形狀是整體與部分的組合性)

我們已經看到了AbstractFactory如何通過破壞冒犯“神祕的7法則”。這就是為什麼程式設計很難的原因之一:因為我們自己認為程式設計很難(簡單事情複雜化)。

相關文章