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

weixin_33766168發表於2019-02-27

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

相關文章