寫給自己看的小設計2 物件設計通用原則 序

2021-09-06 21:04:32 字數 2345 閱讀 8322

程式設計技術發展至今,物件的概念始終貫穿與設計過程的始終,廣義的物件包括了參與設計的所有程式設計元素,比如變數,函式,類,元件,服務等。在程式設計理論中,物件的設計基本上就等同於設計的全部。在物件設計的進化過程中,漸漸的就有了一些通用的規則。人們常說美食要色香味俱全,**也不例外,這裡首先總結了設計中最重要,也最容易為人所忽略的幾個原則,這幾個點都是描述**的外觀特點,我稱之為"**之形",我認為它們是一切設計的起點和基礎。

**之"形"

我記得一位牛叉的程式設計師說過:任何程式設計師都能寫出機器能懂的**,只有最優秀的程式設計師才能寫出人能懂的**。人能懂的**最基本的要滿足下面的幾個條件。

1. 簡單

這一原則非常簡單,又非常重用,任何難以維護和擴充套件的**基本都不是簡單的**,敏捷開發提倡簡單設計,我個人覺得還是非常有道理的,越是簡單的設計,越是簡單的**,越是容易維護,越是容易重構,問題也相對越少。

當然了,簡單並不等同於**越少越好,功能越少越好,這裡的簡單通常指的是邏輯處理上應用簡單直接的設計來滿足目前的需求。

在重構理論中,也非常強調邏輯簡單,比如少用複雜的運算子和複雜的邏輯條件,每個迴圈爭取只幹一件事等等。

在程式設計理論中有乙個很重要的概念叫做圈複雜度,它是用來衡量函式的複雜性的。

函式圈複雜度計算的方法很簡單:

每個函式圈複雜度起始值為1,代表有乙個路徑執行完函式,每遇到乙個if/case/for/while/and(邏輯與運算,如&&)/or(邏輯或運算,如||)就增加1,這樣計算的最終結果就是函式的圈複雜度。

圈複雜度越大,說明函式越複雜,越有存在缺陷的可能,也越有重構的必要。

個人認為把函式的圈複雜度控制在10以內是比較好的做法。

對於物件的設計,有一種觀點我覺得很對,那就是:如非必要,請遠離各種設計模式。這個觀點的就如同另外乙個觀點一樣智慧型:

如非必要,請不要試圖優化**,提高效率。

我記得曾有位仁兄使用了23中設計模式實現了不同的"hello world",從學習角度,我還是很佩服其想象力的;但是從實用角度,我只能表示"呵呵"了。

2. 大小合適

**邏輯簡單的乙個很重要的衍生規則就是**數量要大小適中。我很難想像任何人看見內容有1000行**的函式和內容只有10行**的函式感覺會是一樣!小通常意味著簡單。反之也成立。個人認為把函式的行數限制在50行以內,類的方法限制在30以內是很好的做法。超過這個數目,就有了重構的必要。

有一種很有市場的觀點就是:如果小函式很多的話,呼叫堆疊就會很長,這樣執行的效率就不會高。

針對這種觀點,我的想法是:且不說現在硬體的效能每年都在進行著翻天覆地的變化,就說現在的編譯器已經足夠智慧型了,小函式大多數情況下都在編譯時內聯了,執行的效率損失幾乎是微乎其微。而且從我的感覺來看,大部分專案失敗的原因中,除了對效率要求特別高的專案(我們大部分專案都不屬於這一類),因為效率原因失敗的是少之又少。

另一種觀點是:控制函式行數的話,意味著要拆分很多的小函式,小函式很多了也不好管理,於是不要拆分了。

確實,這個問題是真實存在的問題,每個人可能都會遇到,但是我覺得通過使用注釋標記(特別是c#中有region)還是可以很好管理的。而且相對於小函式帶來的可讀性和易維護,這點損失還是值得的。

所以,我的觀點是盡情通過重構去控制函式的大小吧,無需多慮(我還真怕有人跟我抬槓說:"那你怎麼不一句話乙個函式呢?")。

3. 命名易懂

這條原則無論如何強調都不為過,原因***。物件命名的好壞程度直接反應了乙個碼農程式設計水平的高低程度,對我來說,命名是任何乙個人的基本功,可不僅僅是程式設計師的基本功。

我記的乙個牛叉的程式設計師曾經說過

,好的程式,每個變數,函式,類的名字都非常講究,整體搭配的也都非常合適,閱讀這樣的程式,就像閱讀一篇優美的散文一樣,讓人賞心悅目

我想任何人都到下面兩種**的感覺都不一樣:

//

badvar s = "frank"; //

good

var usr_name = "frank";

//or

var usrname = "frank";

上面不推薦的那種寫法對於for迴圈中的迴圈變數int i來說問題還好,大家已經約定俗成了。如果放到一般的變數上,這種做法就不是太好了。

當然了這種**通常不是一次寫就的,

優秀的程式設計師開始寫的程式也都可能像狗屎一樣,不過他們高人一籌的地方就在於**能工作之後,他們不會停下來,而是不斷的打磨自己的**,讓它們簡單,易懂,靈活

《寫給大家看的設計書》

元素分類放在一起。對齊分為 左對齊 右對齊 居中對齊 兩端對齊 慎用居中對齊,居中對齊的 對齊線 強度弱,沒有力度。對首尾運用重複可以很好地收尾,讓讀者讀到尾部視線停留。整個系統樣式進行重複會讓系統樣式保持一致性,使系統各模組 頁面 看上去是乙個整體。頁面上的元素要有對比,以達到吸引讀者的目的。如果...

寫給大家看的設計書 robin willianms

1.優秀的設計 學習四大基本原則 對比 重複 對其 親密性 認識到自己沒有運用的這些原則 應用基本原則 2.親密性 將相關的項組織在一起 物理位置的接近就意味存在著關聯 親密性意味著關聯 把相關的元素分組在一組,使他們建立更近的親密性 設計 要先從簡單的表達開始 清楚地表達關鍵資訊,包括 誰,做什麼...

筆記 《寫給大家看的設計書》

摘錄,於2017年2月24日 1.四大原則 親密 對齊 重複 對比 2.親密 將相關的項組織在一起,物理位置的接近意味著存在關聯 3.親密即資訊分組,使其成為乙個視覺單元 4.對齊 任何元素都不能再頁面上隨意安防,每一項應當與頁面上的某個內容存在某種視覺聯絡 6.原則 頁面上只能使用一種文字對齊 7...