軟件架構的選擇和設計并不是很容易做出的,一個成功的軟件架構取決于N多的因素,軟件架構這個詞向來就是最為模糊的一個詞,個人認為軟件架構實在是個很大的話題,業界一直采用的形象比喻就是建設房子時的房屋結構圖,以軟件的角度來說,軟件架構應至少包括軟件開發時使用什么語言、形成軟件開發時可運行的核心基礎框架、軟件應用模塊的設計(包括模塊內聚的功能、對外提供的服務等)、軟件測試的方法、軟件部署的方法以及團隊開發的方法,那么怎么來選擇和設計軟件架構呢,其衡量的因素是什么呢,個人認為其中質量和快速是衡量軟件架構的選擇和設計是否成功的兩個最重要的因素。
為什么說質量和快速是兩個最重要的因素呢?首先來看看這里的質量和快速分別包含了什么內容:
質量
軟件的質量是軟件能否成功的非常非常重要的因素,就個人看來,軟件質量應包括軟件功能性需求的實現、軟件非功能性需求的實現。
軟件功能性需求中最重要的就是要確定對于客戶而言商業價值最高的部分是什么,這一項對于軟件架構而言的影響是軟件應用模塊的設計上,而軟件應用模塊的設計呢,通常要取決于可運行的核心基礎框架的設計和實現上;
軟件非功能性需求則通常會包含很多要素,像軟件靈活性、可擴展性、高響應等,在這些眾多的要素中同樣要選擇出對于目前軟件最重要的要素是什么,這會影響到軟件架構中的軟件開發語言的選擇、可運行的核心基礎框架。
軟件的質量還有需要考慮的要素就是軟件測試的方法了(這也會影響到選擇什么語言來開發軟件),這點對于軟件質量而已,無疑是非常重要的一點。
快速
軟件能否快速開發完成也已經成為了軟件能否成功的重要因素,快速開發完成的意思非常容易理解,但它其實很大的程度影響到了軟件架構的選擇和設計,很明顯的它將影響到軟件開發使用什么語言、軟件開發時可運行的核心基礎框架、軟件部署的方法以及團隊開發的方法等等,團隊中的人很大程度上決定了軟件開發時使用什么語言(這個時候也要注意,其實什么語言會影響到開發的速度、開發的質量等,例如erLang的設計目標是為了可構建容錯的系統、c則更適合從底層控制整個系統的交互、java具備豐富的基礎庫、業界資源和更適合復雜業務的需求),至于核心基礎框架、部署的方法、團隊開發的方法的設計都是為了快速這個目標的。
從上面的兩個因素我們可以看到,要使得軟件高質量且快速的完成,軟件架構在選擇和設計上時非常重要的是尋找到一種平衡,所以軟件架構要做到模式化其實并不容易。
在這里多說下別的話,其實從上面所述能看出,去評論哪種語言會死是沒有什么意義的,并不會有一種語言放在任何環境下都適合,就像在互聯網網站的建設上,我想可能很多人都會選擇php+c或類似的語言體系,但大家其實可以仔細去想想,是不是網站的建設上一定要這樣的兩種語言才能承擔互聯網的高并發等需求呢,或許你更應該做的是從該網站最重要的非功能性需求、團隊等等因素來考慮,就像如果你的團隊是java性質的團隊,而網站最重要的非功能性需求又是支持業務的靈活性的話,那么我會覺得c這樣的過程化語言絕對不是這種情況下的最佳選擇,而java卻是這種情況下的最佳選擇,可能很多人會說java太慢呀,什么的,其實并不盡然,很多時候靠硬件以及優秀的架構完全可以彌補掉java比c這樣的程序運行相對更慢的毛病,:),這也算是給java的一個平反吧,呵呵,畢竟java相對c而言還有更大的好處那就是java程序的開發無論從質量還是快速開發上肯定強于c,我這樣說并不是說一定要選擇java,我只是想說明應該根據什么樣的情況來選擇和設計什么樣的架構,那才是最合理的,所以架構永遠都沒有最好的,只有最合適的,而這也是架構師最難做的原因,架構師在做架構的設計和選擇時遵循的出發點就是保證軟件高質量且快速的完成。