摘要:數據庫
某項目的設計文檔評審會上,各路技術大牛進行了「熱烈」的討論,討論的焦點是怎樣的設計才漂亮!你們圍繞着如何OO,如何高內聚低耦合,如何反轉控制等話題進行了「熱烈」的爭論。照這樣開下去,這個評審會豈不是變成了「神仙大會」!怎樣的設計才叫優秀的設計呢?安全
大綱:架構
1.什麼是優秀的設計?
2.優秀的設計能節省項目工做量
3.優秀設計從分析需求開始
4.軟件系統不是木桶型的
5.軟件設計的「大道理」
6.規劃系統骨架——架構設計
7.打造系統的底蘊——數據庫設計
8.細節決定成敗——詳細設計
9.用戶感受好纔是真的好——用戶體驗設計
10.持續提高設計水平數據庫設計
1.什麼是優秀的設計?網站
某項目的設計文檔評審會上,各路技術大牛進行了「熱烈」的討論,討論的焦點是怎樣的設計才漂亮!你們圍繞着如何OO,如何高內聚低耦合,如何反轉控制等話題進行了「熱烈」的爭論。spa
你以爲如下標準能夠成爲「漂亮」設計的標準嗎?架構設計
1)高效
2)可靠
3)易用
4)安全
5)可擴展
6)兼容性強
7)移植性強
……設計
若是每次設計文檔評審,咱們都採用上述標準來評審,你以爲這個設計評審會有效果嗎?視頻
當時我參加了這樣的一個設計評審會,以爲氣氛很不對,照這樣開下去,這個評審會豈不是變成了「神仙大會」!遊戲
因而我問了兩個問題:
1)誰能說說這個項目的主要需求?
2)這些需求,設計上是如何考慮實現的?
結果沒有人能答上來!
咱們從書本上看到的那些」通用「的設計標準,說得難聽一點,就是廢話!對實際的項目工做基本上沒有實質用途!
請看下面4個例子,分別思考這4個案例的軟件設計思路,你會發現上述「漂亮設計的標準」,真的是廢話!
案例1:某項目要求在很短期內完成,並且客戶對系統的當前認識仍是比較初步的,你打算怎樣設計這個系統?
案例2:某軟件公司接了一個「網頁+數據庫」類型的項目,這類項目已經作過多個,但此次的業務倒是新的,你怎樣考慮這個項目的設計?
案例3:某軟件公司已經成功爲n個醫院作了管理系統,如今須要爲一家新的大醫院作相似這個系統,你會怎樣考慮這個系統的設計?
案例4:你接到一個任務,要作一個即時戰略遊戲,目標是要在當前遊戲市場找中殺出一條血路,你怎樣考慮這個遊戲的設計?
4個案例各有特色,分別表明了4種「典型」:
案例1:需求很朦朧,工期很緊,技術上基本上沒有積累。
案例2:需求是新的,但能夠重用「網頁+數據庫」的技術架構。
案例3:需求是相似的,技術架構也是相似的,相信你會直接重用以前的系統。
案例4:這是一個須要創意和高技術含量的遊戲,而遊戲軟件的需求和技術都是充滿挑戰的。
上述4種狀況,相信你採起的設計策略是不同的,你可能會發現所謂的優秀設計沒有固定的標準。
若是硬是要來一個優秀設計的標準呢?
我會這樣說:就是作高性價比的設計!
一個優秀的設計應該具有如下特色:
1)優秀的設計都是需求驅動的,不熟悉需求就作出來的設計是不靠譜的;
2)優秀的設計應該是當前團隊能理解能實現的,太超前的設計項目團隊作不出來,這個設計只能是擺設;
3)優秀的設計應充分考慮當前各類限制條件,適當作出平衡,能保證達成項目的目標:
4)優秀的設計能儘可能下降項目的總體工做量,讓整個項目更加可控。
2.優秀的設計能節省項目工做量
關於軟件設計的話題,若是脫離一些實際案例討論的話,很容易變成空洞無力的學術討論,因此本文將會列出不少案例供你參考。
設計案例:開發某線上社區網站
背景:某社區已經舉辦了多期沙龍活動,爲了拓展沙龍的影響力,讓更多朋友受益,樹立良好品牌,未來實現盈利,有必要創建一個線上的社區網站。
該網站應有這樣的功能:
1)發佈各類活動信息。
2)發佈業界新聞。
3)能開展線上沙龍活動,包括在線視頻沙龍。
4)具有SNS社區,可匯聚人氣。
5)每位會員有本身的博客,能維護本身的我的頁面。
6)支持簡體中文、繁體中文、英文三種語言隨時切換。
7)支持全文搜索。
你打算如何設計上述系統呢?
你可能會問,有工期限制嗎?
你說呢?真實項目必定會有工期限制的,這個項目你的工期只有1個月!
你可能會說:你當我是神仙啊,1個月有可能怎樣死都死不出啊!
這個時候能幫助你的就是優秀的設計,優秀的設計有可能能讓你用不多的工做量就作出來,優秀的設計也不必定須要你所有從零開發的,咱們能夠拿來主義!有很多開源軟件是能夠基本知足上述要求的,咱們能夠直接拿來用,這樣你須要付出的工做量就少不少了。
我曾經用某開源軟件作了這樣的一個網站出來,但發現沒有全文搜索功能,結果我想了一個「投機取巧」的辦法,本身不寫一句代碼,直接利用谷歌的這個搜索功能「site:域名 關鍵字」,讓谷歌幫我搞定全文搜索。固然這樣作出來的效果還不是很完美,但至少我能在很短期內能作出個大概啊,若是本身開發還不必定能作出這樣的效果呢!
小結:
受工期限制、受能力限制等制約因素,十全十美的設計基本上是很難作到的,但若是由於趕工期而在軟件設計上節省時間甚至是直接忽略這步,實際上是得不償失的。在軟件設計上「節省」1小時,可能會讓你未來多投入成倍的項目時間;越是工期緊,越須要冷靜思考軟件的設計,合適的設計能大大地下降項目工做量,讓你後期的工做輕鬆不少。
本文僅僅是本系列文章的第一篇,軟件設計沒有這麼簡單,這僅僅是開始噢……
若是本文對你有幫助,麻煩點一下「推薦」啦,謝謝!
做者:張傳波
創新工場創業課堂(敏捷課程)講師
軟件研發管理資深顧問
CMMI首席專家
《火球——UML大戰需求分析》做者
軟件知識原創基地創辦人