如何設計軟件架構?
軟件架構設計的幾個步驟1,分析需求和理解業務模型(或領域建模),選擇關鍵用例。軟件需求可以分為用戶角度和開發者角度,從用戶角度也可以分為功能性需求和非功能性需求。我們必須從不同的角度和層次全面理解和分析需求,理解業務模型。實踐表明,經常被我們忽略的非功能性需求,往往會導致整個項目的失敗。理解業務需求的最佳方式是領域建模。領域建模和需求分析經常交替進行。領域建模主要有以下三個功能:◆探索復雜問題,理清領域知識。馬丁·福勒(Martin Fowler)曾說過,他的面向對象方法最大的優點是有助於解決更復雜的問題。領域建模本身作為壹種輔助思考的工具,幫助我們始終將註意力保持在最重要的業務概念及其關系上,從而能夠持續深入系統地分析和理解需求。領域建模往往是壹個從模糊到清晰,從碎片到系統的過程。◆確定功能範圍,影響擴展性。任何模型都是現實世界中程序的抽象。這種抽象會忽略壹些東西,比如對象的屬性,對象之間的關系,而這些忽略往往是有目的的,決定了函數的範圍。該模型揭示了各種功能背後的結構。如果說定義函數相當於“拍照”,那麽領域建模相當於“做透視”,更關註問題領域的內部結構,相當於把問題領域抽象到壹定程度。好的領域模型不僅能很好地支持現有功能,還能在壹定程度上支持未來可能出現的新需求,體現出良好的可擴展性。◆提供溝通基礎,促進有效溝通。領域建模通常使用UML圖作為表示方式,這為我們的交流提供了方便。當然,有時候文字在描述某些領域的問題時可能更合適、更靈活。在我們公司實際的軟件開發過程中,領域建模往往缺少這個環節,這可能是在以後的工作中需要進壹步完善的地方。雖然我們總是期望架構師能夠完全掌握需求,但是由於時間和精力的限制,擺在我們面前的現實是架構師沒有時間深入分析所有的需求,所以我們的策略是“把好鋼用在刀刃上”,也就是把大部分的時間和精力花在確定架構最重要的關鍵需求上。在選擇關鍵需求時,需要註意的是,高優先級的需求往往是從用戶的角度來看的,可能不是真正的關鍵需求。在《RUP從業者指南》壹書中,它告訴我們如何確定關鍵的功能需求。a .作為應用程序的核心或實現系統主界面的功能b .必須實現的功能,即如果這些功能沒有實現,開發的軟件就失去了價值c .覆蓋了系統架構的某些方面但沒有被其他重要用例覆蓋的功能。2.從不同的角度考慮軟件架構的所有方面。軟件架構設計必須考慮方方面面,根據前期工作建立的領域模型、關鍵需求和系統約束進行設計,從系統用戶、開發人員、系統管理員、部署管理員和數據管理員的角度分析和解決問題。例如,如果我們的運行架構采用集群模式,我們必須小心緩存和會話的使用。如果我們的業務邏輯要求我們操作多個數據庫,我們應該考慮支持兩階段事務提交。只有考慮到所有這些方面,這樣的架構設計才是完整的。至於每個視圖中我們應該設計的細節,其實是關系到整個項目的流程定義的。比如我們有壹個專門的活動安排數據庫概要設計,在架構設計的過程中可以只關註更高層的數據庫特征和數據庫之間的關系,在後續的相關活動中可以設計每個表的數據字典,但是如果沒有這個活動,我們會細化每個表的每個字段和表之間的關系。3.解決技術關鍵問題和困惑在軟件架構設計的過程中,我們經常需要攻克壹些技術關鍵問題和困惑,這是壹項需要紮實的理論知識和豐富的實踐經驗的工作。例如,如何提高整個系統的性能?如何導出極其復雜的“中國式報表”(壹般比西方國家出的報表復雜很多,很多開源的BI框架也不能完全解決問題)?當妳遇到壹個確實很難的問題,可以去百度或者谷歌,咨詢公司的資深技術人員或者專家,或者召開壹個小規模的技術研討會,嘗試通過頭腦風暴的方式尋找答案,從而提高工作效率。4.召開架構設計評審會議,接受同行評審。建築設計評審是極其重要的壹部分。我曾在《七種武器》中形容為離別鉤,因為同事在會上可能會問很多問題或意見,很多意見很尖銳,所以壹定要虛心接受,做好記錄。俗話說,“良藥苦口利於病,忠言逆耳利於行”。在審查會議之前,我們必須完成大量的準備工作。最好準備壹份簡明的電子簡報,列出最重要的問題,這樣在進行評審會議時,就不會漫無目的。我們會在會前把這些材料發給與會者,請他們花時間先了解壹下。在會議進行的時候,要學會控制會議的進度,提高會議的效率。5.在關鍵用例的設計架構上實現功能,以驗證架構。架構設計的驗證也是壹項非常重要的工作,驗證技術有很多。在我們公司,通常使用樣本的形式,即XP中的叠代0和RUP中的切片。這樣做的好處是可以從實際產品的角度有效地驗證架構是否滿足需求,與廢棄的原型驗證技術相比可以節約成本。這個樣本絕不是我們在解決架構設計中的問題時用來做實驗的壹些代碼的拼湊,而是壹個完整的可交付代碼和滿足架構設計的相關文檔以及實現壹個關鍵用例的壹系列規範。同時,這個樣本可以作為妳講解或者訓練架構時的教材,也可以作為開發者使用這個架構進行開發的藍本,甚至只需要簡單的修改就可以復制粘貼。6.交付給客戶進行審查。這個環節可能很多公司都不存在,因為他們的軟件架構不壹定需要客戶審核,但是對於我們這樣的服務公司來說最重要的是客戶的尊重。實施軟件架構設計的活動,就是讓客戶理解並接受妳的架構設計方案,同時客戶也會起到幫助妳驗證架構的作用。通常我們的架構被客戶認可後,就可以進入大規模開發。當交付給客戶評審時,通常是