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