我對軟體架構的一些看法和思考

zzxsky1986發表於2010-04-24
做了幾年軟體開發,對於各種各樣的軟體架構稍微有一點點的瞭解,對於如今各種各樣的技術也有一些自己的看法,包括對於物件導向的軟體開發和麵向過程的軟體開發也有自己的一點觀點,下邊我來談談我的想法
我是做Java起家的,所以一開始接觸的就是物件導向的思想,後來瞭解的越來越多,接觸的程式碼也越來越趨向於底層,在架構上也開始慢慢入門。
談談計算機的發展,本質上高度抽象的,將現實世界中的事務最終抽象為0和1,怎麼去抽象呢?方法就是去程式設計,從開始的機器語言逐漸發展為組合語言然後更加高階一點的C語言出現了,到此程式設計其實已經變的非常簡單了,可以用比較容易理解的語言和計算機進行溝通,更多的事情交給了編譯器,然後就產生了更高階的語言更加接近於現實思維的語言,如:Java,C。走到這一步其實很多的工作都已經交給了虛擬器去做,而虛擬器是什麼開發呢?C語言,這樣程式設計就變的更加的簡單了,以至於各種各樣的培訓機構如雨後春筍一般的出現,因為少了很多抽象的思維程式設計變的更加的簡單,編碼的成本下來了,那什麼上去了呢?對於硬體的成本上去了。其實這和編碼的道理是一樣的,底層做的工作越多,上次做的工作必定越少,隨之而來的就是大量的封裝,轉換必然會對硬體開銷的增加。
其實軟體開發到底難在什麼地方呢?其實是難在需求上,提出一個問題然後選擇一種合適的方法去解決,這是一種方法論,和實際生活就一樣了。其實做軟體開發和做一道數學題差不多,有時往往有很多的方法,但是肯定有一種方法是最簡單的,最高效的。
好了,現在說點具體的吧,在選擇技術的時候一定不能武斷,一定要弄清楚使用者的需求,以及其潛在需求,儘可能的根據工期來選擇技術,軟體開發沒有銀彈,沒有一種通用的解決方法,只有最適合的,儘量的去接近最優,擴充套件性這個東西其實很籠統,沒有一種技術可能滿足無限的擴充套件,所以一旦開發一套系統必須明確其系統的邊界。如果這個邊界定義不好以後會很麻煩。天氣預報的系統再怎麼使用設計模式,也不可能成為導彈控制系統,這一點一定要明確,擴充套件只是在一個角度上去考慮可擴充套件,比如說資料儲存容量,計算速度等。做技術一定要知道一項技術的侷限性,不要認為這項技術是一種通用的解決方法,舉個例子,現在比較流行的DDD,知道什麼是DDD,DDD開發方法適用於什麼,DDD其實只是一種方法論,主要應用於對問題的建模,對問題的分析,是一種架構的思想。舉個例子來說,對於資料儲存,DDD傾向於使用物件導向的思想去組織資料避開關係型結構化資料,因為關係型結構化資料和麵向物件的思想有很多牴觸,但是從另一個角度去思考,恰恰缺少了對資料的抽象概括,結構化資料在很多場合還是非常重要的。
SQL和NOSQL,大家多去想想他們的侷限性,適用的場合。其實就是關係資料和非關係資料,只不過目前關係型資料技術在效能上有一定的瓶頸,關係這個思想並不落後,其實是對資料組織結構的一種高度抽象,更加通用。
總結一下吧。其實現在才感覺自己剛剛入門,軟體開發的奧義完全可以上升哲學的角度,不知道大家有沒有靜下心來思考一下呢?還是沉迷於眼花繚亂的技術當中呢?

相關文章