1. 程式人生 > >設計的6個考慮點

設計的6個考慮點

設計的6個考慮點

之前維護固定幾個模組的時候沒什麼認識,後來參與了幾個大功能的設計和開發,覺得在動手前,下面這個幾個步驟還是要考慮清楚的:

1. 問題的本質

設計的前期需要搞清楚需求的意義,使用場景,整個產品的交付後用戶真正關心的是什麼,使用者不能接受的場景是什麼。 搞清楚是什麼樣的使用者在什麼場景下用你的產品去解決什麼樣的一個問題。

2. 熟悉硬體約束

一般首先並且僅僅是記憶體,但是對於嵌入式系統來將遠遠不夠,在這裡其實知道的越多越好。因為我們最終無法脫離硬體的約束。 CPU跟以往的比效能上是否有下降?具體差別是多少? 核心分出來的描述符,執行緒資源有多少? 編解碼的能力是多少? 外部的介質是SSD,還是機械硬碟,可供使用的空間多大?各自的讀寫效能又是什麼? 配置的Flash可供擦寫的次數有無要求,對特定的塊是否有特殊要求? IO頻寬又是多大?...等等

3. 資料流

多想幾個流程,你需要選一下,要清楚為什麼不這樣做。 在不涉及具體的資料結構和演算法之前,對於資料流往往會有一個預期設計。 資料流的預期,忌諱的是隻有一個想法就開始按照這個流程設計細節。 如果一個問題,沒有三個及以上的方案,那就是對這個問題還沒有理解。不光是要關係資料流向,也要關心資料的互動方式和交換速度。

4. 程式組織和資料結構

這裡無需贅述。 資料結構不是要想清楚每一個結構體(除非是後期的協議約定),而是對資料處理和互動的整體方式上想清楚, 是連結串列,佇列,堆疊還是別的。 程式組織就是程式碼的分塊,各個子模組,務必保證各自的職責分明,儘量簡要,對外又相互遮蔽。 當然,可伸縮性,可複用性也需要關注。

5. 效能

先明確性能方面的目標,執行起來要多快,已有的資源下達不到的花,剩下的就是決策了,看看是增加成本還是降低標準, 決策的這個點儘量提前,拖到後面往往產品已經成型。

6. 健壯性

儘可能的列舉一系列的異常場景,尤其是對那些比較可能發生的事情。 最後,關於構建設計方面,程式碼大全中讀到一些有用的話,做個摘錄:

1. 大型系統的設計,本質是要保證“概念完整性”,好的架構應該和要解決的問題保持和諧一致,看起來很舒服,而不是感覺硬是將方案和問題綁到了一起。 2. 架構應該描述所有主要決策的動機,為什麼這樣做,為什麼不這樣做 3. 好的架構應該能靈活應對變化 4. 好的架構能實現所有需求,又沒有去刻意鍍金; 5. 軟體中,鏈條的強度不是取決於最薄弱的一環,而是取決於所有薄弱環節的乘積。