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