我們究竟應不應該使用框架?
AxonIQ 商業主管及Axon 框架 佈道師Frans van Buul 近日在其部落格中發表了一篇關於框架和類庫孰優孰劣的文章,引起了人們的熱議。雖然很多人提倡類庫反對框架,但 Frans 仍然提出了一些傾向於框架的見解,詳細內容請見正文。
AxonIQ 商業主管及Axon 框架 佈道師Frans van Buul 近日在其部落格中發表了一篇關於框架和類庫孰優孰劣的文章,引起了人們的熱議。儘管很多人更傾向類庫,但 Van Buul 仍然認為框架對商業程式開發非常有價值 ,尤其是那些使用了CQRS (命令查詢職責分離)、DDD (領域驅動設計)、event sourcing (事件溯源)等架構的應用程式。
Van Buul 認為,類庫是由類和函式組成的一組程式碼,這些程式碼可供應用程式使用,但本身又不是應用程式的一部分,應用程式通過函式呼叫或方法呼叫與類庫互動。而框架則是一種特殊的類庫,應用程式實現了框架提供的介面,或者使用框架提供的註解。程式碼在兩者中的呼叫方向完全相反,框架呼叫應用程式程式碼,而類庫則被應用程式程式碼呼叫。
Van Buul 認為,幾乎所有的應用程式都用到了框架,即使只是一個單純的 Java 應用程式也在無形中使用了框架,畢竟 Java 程式碼仍然需要執行在 Java 虛擬機器這個“大框架”中。他還指出,大多數商業應用程式都會提供基於 Web 的介面,並使用抽象層為應用程式建立入口,這其實也是在使用框架。
Van Buul 認為,框架之所以優越,是因為 CQRS、DDD 以及事件溯源。首先使用框架可以把程式設計師從底層開發中解放出來,只需要關注業務邏輯。他指出,很多時候,人們沒有使用類庫而是選擇構建自己的框架,這隻會讓事情變得更復雜,也會讓程式設計師花費很多額外的時間。他強烈反對這種情形,因為這樣不但會加大風險,還會增加成本。他引用了 CQRS 之父 Greg Yong 在 2016 年DDD 歐洲大會 中的演講 原話:
不要自己開發 CQRS 框架。
Peter Kummins 則認為,框架是系統開發中最大的反模式 ,他認為框架難於上手,也大大增加了專案的複雜度和依賴性。他認為軟體開發應該保持簡單,使用穩定的基礎工具,儘量採用核心語言方案,最大程度地避免使用框架或類庫。
Kummins 反對框架的主要原因有:
-
難學,技術很難應用到其他地方
-
限制了開發人員的創造性
-
增加了專案的複雜度
-
框架隨時有被遺棄的可能性
Mathias Verraes 同意 Van Buul 對框架的定義,並做了如下引用:
類庫被你的程式碼呼叫,但框架主動呼叫你的程式碼。
他反對 使用 框架 ,認為一個超過十年的框架將比那些難懂、過時甚至抽象混亂的程式碼更難維護。他建議只在短週期開發專案中使用框架,如果開發週期允許,還是儘量避免使用框架。
Tomas Petricek 也同意 Van Buul 對框架的定義,但他認為使用框架最大的問題是難以 共容 。當使用兩種框架時,幾乎很難把一個框架應用到另一個框架中,但是類庫就可以很容易的避免這個問題。他同時也認為框架很難深入理解並且會影響你的編碼方式。
Petricek 傾向於使用功能類庫的設計原則,並指出,避免使用框架和回撥的一種方法是使用非同步工作流和基於事件驅動的程式設計機制。這種機制並不是要提供抽象函式或虛擬函式,而是在需要完成某些操作時觸發事件。他還指出,事件機制並不能讓我們控制什麼時候發生事件,我們只能控制事件發生後的東西。如果你不喜歡這種方式的話,就只能使用可組合的類庫,而且要為問題的不同部分選擇不同的類庫。
最後, Van Buul 強調,類庫比框架更靈活,但這也要取決於所使用的框架。如果是不能擴充套件的框架,那自然也就沒什麼靈活性可言,但如果是定義了開放性介面的開源框架,其靈活性則一點不會比類庫差。
英文原文:https://www.infoq.com/news/2019/02/frameworks-libraries-axon