架構設計的目的和意義

        架構設計,簡單說就是“切分”和“組合”的藝術,主要目的是解決軟件系統建設過程中的主要矛盾。這個和我們人類社會劃分組織機構的目的是一樣的。我們可以比較粗淺地認爲架構就是:模塊(子系統)+交互機制,以及一些約束規則和指導原則,那麼爲甚要做架構設計呢?我們只有理解這個目的才能做的更好,我個人認爲可以歸類爲以下幾個理由:     
        第一:做事情正確的方法,應該是從粗到細、層層遞進,緊緊抓住主要矛盾,防止出現方向性錯誤,搞的滿盤皆輸,浪費時間和資源;實際上很多微觀的問題都是宏觀問題的一個投影。架構設計的過程,是層層分解的過程,實際上這是人類做事的重要方法論,一個大問題往往需要綜合各個方面的能力纔可以解決,但是很少有一個人具備這麼多能力,經過分解後,把大問題變成小問題,就很容易找到合適的人來解決,這個在很大程度上提高了效率,這個方法論滲透在各個行業。比如錢學森是導彈的總設計師,他負責的是最頂層的設計,而他的手下又有這個導彈各個部分的設計師,有的人關注空氣動力,有的人關注爆炸的破壞力等問題。我們的軟件架構師也分爲:首席架構師和各個子系統或者模塊的架構師;我們的需求人員在做需求時,先提取“客戶的願景”,然後再由願景提取和分解出頂層概念,然後再逐層分解成更小的概念。例如,公共資源交易的願景是“公開、公平、公正”,然後在這個基礎上分解爲建設工程、政府採購、產權、土礦這樣的子系統概念,然後每個子系統再拆分爲項目、公告、答疑、公示等等。再比如,我們實現一個軟件,過程是:頂層設計->子系統設計->模塊設計->類文件設計->方法設計等等,把一個龐大的系統最後分解爲一個個JDK的API。
        第二:分解問題,聚焦問題,降低問題的複雜性,因爲人腦的處理能力是有限的,我們之所以有的時候需要藉助模型,模型本身就是一個對實際目標的抽象,就是爲了忽略一些無關緊要的影響,以此來照顧我們“不夠聰明的大腦”;隔離問題,便於管理;這些問題來自於功能性需求、質量需求(吞吐量、響應速度、高可用、可擴展、易用性等等),以及其他非功能性需求,比如工期要求、比如硬件環境要求,再比如開發過程中在大量人員介入後,不要出現瓶頸問題。我們關注的問題,就是我們要重點關注和需要採取手段的地方。比如我們使用消息的時候,我們預估後期會出現高併發的消息機制,我們就可以抽提出消息接口,將消息接口和消息實現接口分離,以後我們換了消息後,對使用消息的模塊造成的影響最小;
        第三:居高臨下,宏觀上統籌規劃;排任務優先級,防止出現瓶頸,做到風險前移。理清系統邊界、挖掘潛在需求。比如,我們通過建模能夠發現關鍵模塊和路徑,可以提前在較粗的顆粒度上完成驗證,即使出現方案失敗,也發生在大量資源投入之前,最大程度減少浪費;
        第四:提取通過用功能、降低開發工作量。重複是軟件的大忌。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章