1. 程式人生 > >互聯網研發設計模式之領域驅動設計,讓程序員心中有碼

互聯網研發設計模式之領域驅動設計,讓程序員心中有碼

集體 個人經驗 隨著 無法 需求調研 組織 一致性 一段 center

  

傳統項目管理模式,讓設計成為累贅

作為一名資深軟件行業從業者,我以前一直從事項目開發。在項目執行過程中,往往會采用快速開發模式,按照軟件工程的基本流程建立一套項目軟件管理模式。這個流程大概是這樣的:1,需求調研:大概花費合同周期的六分之一時間來進行需求調研,需求調研環節力求對用戶需求進行全面的掌握,並整理成需求規格說明書。2,總體設計和詳細設計:花合同周期六分之一的時間進行項目的總體設計和詳細設計,詳細設計必須覆蓋所有需求,甚至需要精確到偽代碼的編寫。3.項目部署:剩下的時間進行項目的現場實施工作。項目的周期和項目的範圍往往各不相同,為了保證軟件的質量,上述每一個環節都非常重要,哪個環節的缺少都會對項目完成無法彌補的困難。

有時候,有的軟件公司往往為了更快的完成項目,會把軟件設計人員和開發人員分成兩支不同的組織,一支專門進行軟件的設計工作,完成甲項目設計後就快速的投入到乙項目的設計過程中。而研發任務留給研發團隊來完成,如果遇到設計上的問題,再由設計團隊對軟件設計進行調整,由開發團隊進行實現上的完善。某種意義上講,這種模式已經成為軟件工業上的主流模式,無數家軟件公司正是靠這種方式實現了一個又一個的復雜項目的。

然而,這種模式並非完美無缺,他也造成了一系列問題,尤其是單純從設計角度來說。例如,由於過份的重視設計,每個開發者只能從某個細節入手進行代碼的實現,而可能不知道這個功能在整體項目中的位置,缺乏了對項目的整體思維。例如,由於設計人員本身知識面也好,技能也好,可能導致設計出來的成品根本不符合需求,後期需要花大把的時間進行調整,最終導致設計文檔成為沒用的負擔。

02敏捷開發,解放生產力,從拋棄文檔開始

大型軟件公司優先意識到這個問題,並對這個模式進行了深入研究,推出了新的理念,極限編程和敏捷開發。在敏捷開發模式中,1,首先要求要拋棄臃腫文檔。2,沖刺,以一段時間作為一次沖刺,例如,以兩周為一次叠代周期,發一次版本。3,建立裏程碑。4,使用看板。5,建立用戶故事和統一建模語言來表達一個項目。6,項目組的每一個成員都是團隊不可或缺的部分,盡可能的在一個地方辦公。7,每天一次例行站立會議。由於敏捷開發極限編程解決了許多現實問題,成為大家廣泛使用的行業標準。

互聯網公司將敏捷開發用到了極致,然後建立了一套自己的產品發布流程。這個流程有可能是以兩周為一次叠代;產品開發周期為五個步驟,需求,原型設計,界面設計,功能開發,測試,發布;使用看板和站立會議,確保任務良好的執行。等等。

對於互聯網公司而言,時間就是生命,誰最先開發出優秀的產品,意味著最先搶占先機。從單純的功能角度來看,互聯網公司的產品往往功能點數量並不會很多,因此在短時間內會把每個功能做到極致。一方面,從需求層面來說,要做到滿足百分之八十用戶的普遍需求,要細化和固化需求,原型設計力求完美,界面設計力求精確到像素點,文案要經得起考驗。功能開發層面,選擇最成熟的技術方案,做最穩定的功能,確保更高的質量和更穩定的性能。由於前期準備工作充分,在研發階段的工作量實際上已經越來越少了。於是,開發階段的沖刺也意味著更側重於單純的應用實現,不再需要寫方案,畫流程,設計數據庫,最後才實現功能。

03領域驅動,讓程序員心中有碼,一劑良方?

從上述過程可以看出來,有的互聯網公司實際上已經拋棄了研發設計過程,而更專註於功能實現,開發者的唯一目標就是最快的時間完成任務,不需要太多的想法,不需要過度的設計,純粹的功能實現而已。問題是,功能設計真的可以丟棄嗎?

在互聯網公司飛速發展的背後,往往需要更加職能化,專業化的團隊,產品開發的背後,實際上是分工明確小團隊集體智慧的結晶。但是,由於缺失了研發設計環節,就可能導致研發過程中,功能的開發全憑開發者的個人經驗。對於簡單的業務,尚且能夠掌控,稍微復雜一點的業務就可能需要付出一定的代價才能勉強應付了。由於功能開發取決於個人經驗,就可能導致模塊的開發,從短期來看滿足了眼前的應用指標,但是卻為後期的發展留下了弊端。隨著原有開發者工作職責的調整,或者離職,將最終導致憑經驗開發的功能模塊成為無人能維護的神之領域。

在這樣的背景下,領域驅動設計成為普遍的選擇。實施領域驅動,往往需要由領域專家對系統進行分析,將系統抽象化,然後建立相應的領域模型。實際上領域驅動設計,領域建模同樣是非常重要的部分。即團隊應使用統一的語言建立軟件領域模型,並根據模型來指導開發,其模型應該是能夠自我解釋,讓人通過模型可以理解開發者的意圖。通過領域驅動設計,讓不同的開發者根據應用場景進行模型設計之後,再按照一致性的規範實現功能,最終可以有效的保證產品研發質量的提升。領域驅動設計的背後,需要開發者不能只專註於眼前功能的實現,而應該能夠從全局去了解業務,並充分的將業務吃透,以可傳承的知識的形式融入到開發過程中,只有這樣才能促進產品更好的開發。然而,領域驅動真的是一劑萬能的良方嗎?

互聯網研發設計模式之領域驅動設計,讓程序員心中有碼