「過度設計「說的根本不是設計問題

2021-10-19 09:23:20 字數 1460 閱讀 4439

yf 2021-2-6 14:04

我們領導昨天教育我們說,不要過度設計,先做最重要的功能!最近學了潘老師的書,題也做了一些,感覺好像說的是功能不是設計,老師怎麼看?

umlchina潘加宇

你的感覺很正確!

很多人說"過度設計(overdesign)"的時候,說的根本不是設計問題,而是「需求蔓延(requirements creep)」。

比如,搜尋引擎搜「過度設計」,第一頁出來的這個文章:

(本圖僅為示意,不代表同意/不同意觀點。)

按照《軟體方法》的軟體開發工作流:

a-業務建模——定位需要改進的目標組織(人群或機構)以及該組織接下來最需要改進的問題。

b-需求——描述為了改進組織的問題,所引入的資訊系統必須具有的表現。

c-分析——提煉為了滿足功能需求,所引入的資訊系統需要封裝的核心域機制。

d-設計——考慮質量需求和設計約束,將核心域機制對映到選定非核心域上實現。

很多平時所說的「過度設計」,說的是b-需求,說的是花精力去做很多【用】不上功能,而不是說c和d,即系統內部怎麼構造的,分解成哪些類,還是沒有類全是過程,它們之間怎麼互相呼叫的,分了多少層……

類似於「架構」、「設計模式」,「過度設計(overdesign)」一詞應該也是**於建築。在計算機行業最早是誰使用我就不知道了,但最有名的應該是2023年 fred brooks的《人月神話》裡「自律—第二系統效應」一節提到的overdesign:

brooks說的就是工作流b-系統的需求——「使用」,不是說該系統內部如何構造。

即使是看起來真的是說「內部」的設計的,其實有可能還是需求問題,比如,網路上摘的這篇:

以上文章以為所說問題是「設計」,其實問題是,考慮了不存在的需求,跟設計過度不過度沒什麼關係。更何況,如果「支援美元充值、港幣充值」這個需求確實存在,圖中這個「設計」把各種變化頻率不同的概念攪在乙個表裡,連「設計」都沒有,跟「過度設計」還差十萬八千里呢。

至於真正的「過度設計」——系統的需求是正確的,但系統內部構造精妙到過分了,呵呵,似乎我見都沒見過。

見到的基本上都是偽裝成「過度設計」的「沒有設計」。架構師沒有掌握類圖、狀態機圖等基本的建模手段,領域邏輯都沒有能力理清楚,就知道用自己懂的一點粗淺知識來湊工作量,參見《廢話迷》。

更糟糕的是,「過度設計」還成為拒絕思考的遮羞布——我害怕自己「過度設計」,所以乾脆就不學習設計了,這樣就避免了陷入「過度設計」的陷阱。

UI設計中的過度釋放

昨天在做相簿的時候遇到了乙個問題,系統沒有報錯,但在執行後總是crash,來回找錯好幾次也沒有發現錯誤,後來才發現是記憶體管理出了問題.在viewcontroller中,我宣告了乙個 uipagecontrol page 的屬性,但是在實現的時候,一時粗心大意我將 self page uipagec...

聊聊CORS的過度設計缺陷

注 本文不講cors原理,且預設你已了解cors,但對其中一些細節抱有同樣的懷疑瀏覽器的同源策略自其誕生以來就一直存在,如何進行跨域hack,一代又一代的前後端都為此費盡了心機。首先可以肯定的是,同源策略的限制是合理的。因為,服務端後台介面就部署在那,任何人只要構造了乙個正確的http請求,都能得到...

認識抽象的陷阱 過度設計

提到過度設計,大概很多人都知道。但怎麼樣界定過度設計,確是很難說的清楚。就是因為難以界定,所以就出現了可意會不可言傳的意味。彷彿成為了一種非常高深的傳統文化。那麼怎麼界定呢?要界定,那麼就應該要有衡量的標準。找到這個衡量標準,而且是可以描述的,可量化的,可理解的。歷經這麼多年,脫離區域性的思想,拋開...