您好,登錄后才能下訂單哦!
自從計算機出現以來,計算機硬件和軟件的發展軌跡完全不同,計算機硬件的發展可以用波瀾壯闊來形容,從電子管、晶體管發展到集成電路、大規模集成電路,CPU從單核發展到多核,顯示器從電子屏發展到液晶屏,硬件技術和產品不斷更新換代,硬件生產力不斷出現飛躍式發展;而計算機軟件卻一直以一種緩慢的速度發展,雖然編程語言從二機制、匯編語言發展到了高級語言,各種軟件技術和框架不斷涌現,但軟件產品生產力的提升非常緩慢。回頭看近二十年計算機硬件生產力和軟件生產力的發展速度,我們會發現,軟件生產力的發展速度,遠遠低于硬件生產力的發展速度。
分析這種巨大反差的根本原因,可以發現,計算機硬件的發展是站著工業化生產這個巨人的肩膀上的,而計算機軟件仍然處于低水平的手工業生產階段。不是嗎?一個軟件產品需求出來,需要建立一個團隊負責軟件需求、設計、開發、測試、安裝部署等軟件產品生產周期的各個階段,需要程序員一行行手工編寫代碼去實現軟件產品功能,下一個軟件產品的開發,重復上述過程,無一例外,社會化的分工與協作、標準化、模塊化、快速迭代與大規模生產等工業化概念,在軟件產品的生產過程中很難見到,現在的開發團隊、組織、公司,恰如古代的手工作坊。所以,目前的軟件開發還處于手工業生產階段。
軟件的未來和發展趨勢就在于軟件生產的工業化。有人說軟件太復雜了,各種依賴包、版本控制、協議和編程語言不同等一系列問題,導致想要實現類似硬件的工業化生產幾乎不可能。但是,這種軟件的復雜性又來自哪里呢?對于全世界的軟件開發人員來說,從來沒有一個統一的規范來約束其開發過程,文件名稱、方法名稱、參數變量等等隨便定義,數據存儲與返回值沒有約束,這樣開發出來的軟件很難重用和互聯互通。各種編程語言有各自的編碼規范,而這些編碼規范在哪個軟件產品中起作用,要看開發團隊或開發人員的自覺。所以,軟件的復雜性在于沒有一個工業化規范來約束軟件產品的開發和生產。
那么,軟件工業化實現起來真的很難嗎?我們摒棄軟件復雜性的說法,看看如何用功件和面向功件編程,實現軟件工業化生產。
在闡述功件之前,我們先澄清一下功件和目前軟件開發中的組件(構件)的區別。
首先看一個軟件產品中的組件,如下圖:
從上圖可以看到,雖然“軟件1”中組件可以實現軟件產品中的部分功能,但上圖中的灰色區域,卻需要軟件開發人員一行行編寫代碼、文件配置等操作作為粘合劑,將這些組件粘合在一起才能生產出一個軟件產品。開發下一個產品“軟件2”呢,和“軟件1”的開發沒有區別,如下圖:
假如開發一個“軟件3”,其包含了“軟件1”和“軟件2”中的部分組件,會是什么情況?看下圖:
從上圖可以看出,即使前兩個產品中的部分組件可以直接應用到“軟件3”中,但是灰色區域部分的工作是必不可少的。
下面,我們看看“軟件1”的理想構成是什么樣子的,看下圖:
從上圖可以看到,“軟件1”由3個功件構成,沒有灰色區域;假如開發另外一個產品“軟件2”:
從上圖可以看出,“軟件2”中的功件X不需要重新開發,這會節省很大一部分工作量。同樣,假如開發產品“軟件3”,包含了“軟件1”和“軟件2”中的部分功件,會是什么情況?看下圖:
從上圖可以看到,只要將“軟件1”和“軟件2”中的功件進行組合,就可以組成“軟件3”,沒有灰色區域,即可以在不需要開發人員一行行編寫代碼、文件配置的情況下,完成了“軟件3”的生產。假如,“軟件1”和“軟件2”由不同的團隊來實現,就更加能夠體現出功件技術相對于傳統組件(構件)技術的優勢。
下面看看什么是功件和面向功件編程:功件,簡稱Func,全稱為軟件功能件,即軟件功能模塊;面向功件編程,簡稱FOP,即Func Oriented Programming,其以“功件規范”為規約進行軟件產品的開發。在這里,拋開技術實現細節,從業務整體角度來看待一個軟件產品,這個軟件產品包含哪些功能模塊,這些功能模塊就可以定義為功件,也就是說,僅這些功能模塊組合一起,就能生成這個軟件產品。
下面以Jamobo2項目為例來說明如何用功件技術開發一個軟件產品:
從上圖可以看到,Jamobo2軟件項目的整個文件結構,根據“功件規范”要求,所有功件均位于f目錄下,而每個功件在一個軟件項目中,僅有一個,功件由一個功件主文件和一個功件主目錄組成。上述Jamobo2項目中有以下幾個功件,其中底層功件有:Authorization(授權)、Setup(安裝)、User(用戶)、X(公共類),顯示層功件有:AlertPage(提示頁)、SetupPage(安裝頁)、UserPage(用戶頁)、XPage(首頁)。由這些功件組成,可以看到Jamobo2這個Web項目或者這個軟件產品包含“安裝、首頁、用戶、授權、提示頁”這幾個主要功能。其內部具體實現細節不再贅述,請訪問Functree。
根據上述內容,可以總結以下幾個面向功件編程的優點:
1. 開發周期短,因為不需要編寫一行行代碼作為粘合劑,也不需要很多的配置文件。
2. 功件位于一個目錄(空間)下,這樣能夠讓開發者很快把握軟件項目的功能模塊組成,降低軟件產品升級、維護的復雜度。
3. 當開發一個新項目的時候,完全可以直接把其他項目的功件直接搬過來使用,可能僅僅需要進行一些小小的改造或不需要任何改造,即可應用到新項目中。
4. 這樣簡單的、規范的功件樹結構,會使得自動化開發、測試、部署、運維的難度大大降低,從而可以更容易的開發出一些自動化工具來輔助整個軟件產品生命周期的各個階段,進一步提高開發效率和縮短工期。
5. 功件的開發,將開發人員從橫向(地域)、縱向(時間)兩個方面解放出來,從而使得不同地域、不同時間點、擅長不同專業領域的人員能夠配合起來,實現社會化的分工與協作。
在面向功件編程過程中,需要注意以下幾個問題:
1. 按照“功件規范”開發功件,會導致開發人員的開發自由度降低,這是標準化、工業化、模塊化生產軟件產品的必要條件。
2. 某些軟件框架不能用了,或者需要進行改造才能符合“功件規范”要求,不可避免出現重新造輪子的疑問和爭論。
3. 在一個軟件項目中,功件之間應盡量減少繼承關系,功件盡量做到功能和數據的自包含,減少對其他功件的依賴,這樣可能導致軟件產品的尺寸增大。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。