我們究竟應不應該使用框架?

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章