詳細設計是軟件開發中很是重要的環節,不管你是工做幾年的技術大牛,仍是隻有一兩年工做經驗的小菜。可能你看到設計兩個字,就以爲很是高大上,然而你只要在用心寫代碼,在思考如何定義方法,如何定義類,你都在作着詳細設計。至於作的怎麼樣,那就另說了。html
首先詳細設計不一樣於架構設計,架構設計主要關注系統的架構模型、系統開發語言選型、系統數據存儲方式選型、系統模塊的劃分以及系統模塊間的關係,關鍵技術的選型,系統部署架構,系統硬件需求、系統的安全性擴展性等內容。
詳細設計不一樣於代碼實現,代碼實現主要關注方法級別的算法實現,以及方法級別的調試,單元測試,以及各個模塊間的接口聯調。
那麼詳細設計是包括哪些內容?詳細設計包括業務接口的定義、領域模型的定義、持久化層接口定義、關鍵業務設計模式的選用、關鍵業務模塊的設計方案、關鍵方法的實現算法的選用等。固然若是web項目還包括請求響應接口的定義,我認爲這是一個很是重要的工做。哪些地方可使用ajax,哪些地方選用直接輸出html。直接影響着響應速度以及用戶體驗。git
一、深入理解架構設計模型,理解爲何選用這種架構。這種架構對於目前系統的利與弊。
二、深刻理解業務需求,而且可以預測部分需求的變化方向。可以理解業務的本質。
三、具有面向對象思惟,熟悉面向對象的基本設計原則,熟悉設計模式、重構技術。
我只是暫時想到了那麼多,還涉及其餘能力。固然我也是在爲達到以上的能力努力中。從以上能夠看出,成爲一名好的詳細設計人員仍是很是有難度的。這可能具有良好這種能力人少的緣由之一吧。github
固然對於一個小的系統或者一個簡單的系統,詳細設計作的很是好可能不是必須的。可是對於一個互聯網產品,我認爲仍是很是重要的。如今不少互聯網產品都提倡敏捷開發。在不斷快速迭代的過程當中,若是詳細設計沒作好的話,隨着迭代版本的增長,代碼會變得面目全非。甚至推倒重來。
一、詳細設計決定着系統的質量。在軟件系統開發過程當中,可能一直存在這個問題,修了一個bug可能引發一堆bug,這個可能都不陌生。詳細設計人員須要考慮設計的方方面面,好比職責如何分離,接口職責如何定義。能夠有效減小這種狀況出現的可能性。固然不能徹底杜絕,^_^。
二、詳細設計決定着系統的可擴展性。系統的擴展性,一直是一個頭疼的問題。特別是在互聯網產品中,需求變化之快,以及用戶量增長又比較迅速。詳細設計人員須要考慮業務方面的擴展性,也須要考慮一些性能上的擴展性(固然性能的可擴展性,大部分屬於架構設計的範疇)
三、詳細設計決定着系統的可維護性。可維護性指的是改正、改進、改動軟件的難度,這個的控制大部分把握在詳細設計人員的手裏。詳細設計作的好對於軟件的迭代很是有利的。
四、詳細設計決定着你需不須要加班。這個就不用說了。相信你們都明白。web
以上扯得夠多了,本系統主要總結一些詳細設計的方法,你們共同窗習,首先我不是詳細設計的大牛,只是菜鳥,之因此寫本系列,主要是對於詳細設計的一些思考總結分享給你們,使本身也可以技術上獲得進步。對於本系列中的思考,很是感謝znyin,和他共事將近一年,學到了不少詳細設計方法以及思想,給了我不少寶貴的實踐機會,很是感謝,本系列也是我從他那學習的技術的總結。
本系列計劃包括以下內容:
一、如何作詳細設計之序
二、如何作詳細設計之設計即編碼
三、如何作詳細設計之規範
四、如何作詳細設計之設計原則
五、如何作詳細設計之理解業務本質
六、如何作詳細設計之重構
七、如何作詳細設計之設計模式
八、如何作詳細設計之總結ajax
本系列文中觀點僅是我的觀點,歡迎討論。算法
本文同步http://yywang.info,天天同步一篇,將所有系列同步至博客園設計模式