[其他]設計準則整理

[其他]設計準則整理

整理一下之前學習的設計準則

1. Do not make me think

某個東西越是需要投入大量時間(或者看起來會這樣),它將來用到的可能性越小,要讓使用者直覺的操作。

http://www.raydeng.com/%E3%80%8Adont-make-me-think%E3%80%8B%E7%AC%94%E8%AE%B0.html

http://www.linlife.com/blog/index.php/archives/64

2. KISS(Keep It Simple Stupied)

最簡單的解釋往往是最正確的(不要過度解釋怎麼做,要解釋為什麼)(可以採用一些工具來產生註解 DotNet : GhostDoc Java : JavaDoc)

這裡的 Stupid 翻譯為「一目瞭然」更好一些,簡單並不意味著一目瞭然,比如「.(){..&};.」,夠簡單吧,但看懂這是什麼嗎?這其實是一個 bash 中的 fork 炸彈(不斷 fork 一個新進程,耗盡系統資源)。

所以做到簡單的同時,還要做到一目瞭然。你也可以這樣理解,將一個軟體做得連白痴都會用。這就是用戶體驗的最高境界了。

如何做到簡單且一目瞭然呢?這要歸結到軟體開發的可維護性和可理解性。KISS 原則往往體現在需求設計階段,當你考慮如何將客戶的需求轉變成一個可實現組件時,嘗試確認以下部分:

●收益和努力比例不調的功能

●高度依賴其他功能的功能

●可能會變得複雜的功能

總而言之,如果一個任務看起來超複雜,試著去考慮一種創造性、獨特的方式。多花時間去討論關鍵點,看是否有其他更合適的方案。

http://zh.wikipedia.org/wiki/KISS%E5%8E%9F%E5%88%99

http://people.apache.org/~fhanik/kiss.html

http://blog.jobbole.com/22559/

3. DRY(Do not Repeat Yourself)

這個原則非常重要,換言之,就是不要寫重複的代碼。(現有的程式可以利用重構及設計模式改善結構,前提是要有嚴謹的測試框架)

當你正在構建一個大型的軟體專案項目時,你通常會被整體複雜性搞得不知所措。解決複雜性的最基本的策略是將系統分成若干個容易處理的部分。起初,你可能想將系統按組件劃分,每個組件代表了一個子系統,其中包含了完成特定功能所需的一切。組件還可以往下再分,這樣複雜性將被降低到單一職責(single responsibility),每個職責可以使用一個類來實現,類包含了方法和屬性。方法實現算法,這些算法和算法的子部分是構成軟件業務邏輯的最小知識塊。你只需要保證這些塊不重複即可。

DRY 原則規定,在整個系統中,每一個模組只可能發生一次,且每個模組必須有一個單一、明確、權威的表徵。

(採用物件導向設計方式,高內聚低耦合,每個物件遵守下列原則

A. 單一職責 : 每個物件負責單一或同性質任務

B. 開放封閉 : 開放新增封閉修改

C. 依賴倒轉 : 高層的物件不應該依賴低層模組 ,應該相依於抽象(介面,interface) ; 抽象不應該依賴細節,細節應該依賴於抽象(抽象類別, abstract class)

D. Liskov替換原則 : 子類別必須能替換掉它們的父類別)

在一個完美的應用程序中,每一小塊業務邏輯將被封裝在一個表徵中,也就是一個變數或一個類別。變數被封裝在一個能夠被描述為一個職責表徵的類別中,類別被封裝在一個能被描述為功能表徵的組件中。這種方式稱為模塊化架構,DRY 原則是其一個重要的部分。

http://en.wikipedia.org/wiki/Don't_repeat_yourself

http://blog.jobbole.com/22559/

4. YAGNI (You Ain’t Gonna Need It)

YAGNI 原則指的是只需要將應用程序必需的功能包含進來,而不要試圖添加任何其他你認為可能需要的功能。

在一個軟件項目中,往往 80% 的時間花費在 20% 的功能上。

(不要過度設計,不做假設性的需求,系統上線前務必做可用性測試)

當你準備列出一個項目清單時,試著考慮以下問題:

●通過降低抽象的層級,來實現低複雜度

●根據特性將功能獨立出來

●適度接受非功能性需求

●識別耗時的任務,並擺脫它們

http://en.wikipedia.org/wiki/Don't_repeat_yourself

http://blog.jobbole.com/22559/

5. Less is more

這是著名的建築師米斯.凡德洛說過的一句話,意思是「少即多」這是一種提倡簡單,反對度裝飾的設計理念。簡單的東西往往帶給人們的是更多的享受。

http://en.wikipedia.org/wiki/Less_is_more

6. 以用戶行為為設計主體

7. 設計是一項發現過程

8. 設計是一項迭代過程

9. 設計必須兼具技術可行性及商業可行性

10. 系統上線前務必進行可用性測試

11. Dieter Rams的設計十原則

良好的設計是儘可能少的設計
良好的設計是創新
良好的設計使產品有用
良好的設計是美學
良好的設計可以幫助理解產品
良好的設計是謙虛的
良好的設計是誠實的
良好的設計是持久的
良好的設計貫徹到最後一個細節
良好的設計是與環境共生的

12. 設計的五個面向

功能
形態
理念
態度
責任

http://www.programmer.com.cn/13186/

13. 用戶介面設計原則

清晰度是首要工作
界面是為促進交互而存在的
保護和尊重用戶的注意力
讓界面處在用戶的掌控之中
直接操作的感覺是最好的
每個屏幕需要一個主題
勿讓次要動作喧賓奪主
自然過渡
外觀追隨功能(類似於形式追隨功能)
區分重點
強烈的視覺層次感
恰當的組織視覺元素,減輕用戶的認知負荷
色彩不是決定性的因素
循序展現
內嵌「幫助」選項
關鍵時刻:零狀態
 針對現有問題去完善界面
優秀的設計是無形的
多領域學習,借鑑其他學科
界面的存在必須有所用途

http://blog.jobbole.com/24933/