經過軟體工程概論、軟體需求工程、軟體測試、軟體過程管理這一系列的軟體核心課程的學習,對軟體這個詞剛剛有了初步的了解。印象最深刻的就是要以使用者為中心,因為隻有真正了解了使用者的需求,站在使用者的角度去開發軟體才能取得最好的效果。碰巧的是,在架構漫談這一系列的博文中,也是一直在強調尋找問題的所在,尋找問題的主體,隻有把問題的主題找到才能試着去尋找最佳解決方案;反之,如果看到客戶需求之後,一上來就找到一大堆解決方案,往往會迷失方向,進而忘記問題的根源所在,出現在中期階段将所有完成的工作全部推翻這種情況。通過這幾篇文章,談一下自己對軟體架構的了解。
軟體大多是給人來用的,而由于人對目标系統有越來越高的要求,比如說QQ這款大家最常用的軟體,它從一開始隻有單純的社交功能,到現在豐富的視訊聊天、QQ錢包裡買電影票、交話費等功能。而這個時候,傳統的軟體開發模式想必已經完成不了對這個龐大的系統開發,需要站在架構的高度将它進行進一步的拆分。本着使用者至上的目的,在收集客戶需求後進行分析确定業務目标來對任務進行劃分。在網上找到的資料顯示,騰訊的技術方面大概分為互動娛樂、移動網際網路、網絡媒體、社交網絡、技術工程幾個部分,雖然不太知道這幾個部分之間是怎麼聯系組合起來的,但是這幾個部分的劃分是很明顯的。這樣把開發團隊進行劃分就會使從業人員各司其職,發揮自己的長處來使軟體開發進展地更好。
對于切分這項工作,需要做到責任和義務的均衡,本着這個原則,盡量使得每個利益相關者(stakeholder)的權責對等。當然為了使效率最大化,最好使架構的劃分結果層數少一點,就好比一個項目經理,分管幾個部門經理,如果再有很多很多級别的話,高層的真正想法會很難傳達到下層,造成資訊失真。
然後,對于軟體來說,它就像是模拟人生活的一種方式,著名的邱琦-圖靈論題說到:一切視覺上能行可計算的函數都可用圖靈機計算,反之亦然。好比是ATM機就是在模仿人們在銀行裡辦理的存取款、轉賬等一系列的業務流程。仔細分析的話,這個嵌入式的小軟體的每一個小的業務流程都可以一一列舉出來,那就跟人真實的操作是一樣的。其次,在完成這個軟體系統的時候,最重要的就是互動、業務和資料的分離。我們學的SSH架構,MVC理念等一系列的技術應該都是為了将這個分離進行實作和完善。因為當資料變得非常非常大的時候,如果不能做到将資料和業務關系分離的話,必然會使系統無限的膨脹,難以維護甚至造成癱瘓。而如果業務和與使用者的互動不能分開,那業務稍加變化系統前台就會有很大的變化,這顯然不能滿足使用者的實際需求。
總之,架構就是首先明确使用者的需求,即明确要解決的問題以及其主題,這時相當于完成了很大一部分工作;然後提出解決問題,對整個軟體系統進行合理的拆分,再利用特定的模式将其有機地結合起來進而完成軟體的設計的過程。