我们究竟应不应该使用框架?
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
我们究竟应不应该使用框架?相关推荐
- 在中国应如何改良Scrum框架
在中国应如何改良Scrum框架 @吴穹Adam (新浪微博) 在我的CSDN博客(http://blog.csdn.net/adwu73)上面,我发表了一个"为什么纯粹的Scrum在中国很难 ...
- 一探究竟:安卓老牌注解框架androidannotations
简介 直接上代码: PS:其他常用注解字段: 线程注解 @FloatRange 用法 @IntRange用法 @Size用法 intent权限注解 Content Provider 权限注解 @Req ...
- 科普:进入内核态究竟是什么意思?
欢迎关注方志朋的博客,回复"666"获面试宝典 太长不想看的直接看总结: 内核态,或者说CPU的特权模式,是CPU的一种工作状态,它影响CPU对不同指令的执行结果.操作系统通过跟C ...
- 敏捷原则比敏捷框架更重要
2018年5月10日,敏捷宣言的发起人之一Ron Jeffries公开宣称"开发人员应放弃使用敏捷框架".Ron Jeffries提到,诸如Scrum和看板之类的敏捷框架,与敏捷原 ...
- Java日志框架Slf4j+Log4j入门
一.日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的日志 ...
- java sl4j 日志_Java日志框架Slf4j+Log4j入门
一.日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的日志 ...
- Struts2框架--学习笔记(上):搭建struts2工程、struts2基本概念、struts2对页面数据的操作
概述: Struts2框架应用于javaee三层框架中的web层.是在Struts1和webwork基础上发张的一个全新的框架. 一.搭建一个最基本的struts2工程步骤: 1.导入基本的jar包依 ...
- ssm学习之ssm框架详解
此文章转载:https://blog.csdn.net/khxu666/article/details/79913151 Java Web常见的三层结构 表现层:也就是Web层,常见的框架有Sprin ...
- 带你理清 Java 混乱的日志体系 - log4j、logback、log4j2、jcl、SLFJ 究竟是啥关系?
1.JAVA混乱的日志体系 换乱的java日志体系 case: SLF4J-JCL LOG4J-CORE LOGBACK SLF4J-SIMPLE JCL-OVER-SLF4J LOGBACK-COR ...
最新文章
- session.invalidate()
- python实现redis三种cas事务操作
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复...
- 大规模markpoint特效
- 深度学习之卷积神经网络(8)BatchNorm层
- nedc工况_东南DX3 EV续航升级 NEDC综合工况续航451公里
- 资源下载| 深度学习Pytoch1.0如何玩?这一门含900页ppt和代码实例的深度学习课程带你飞
- ubuntu java对比win_Ubuntu PK Vista Java性能大比拼
- Linux学习总结(六十六)打印一串数字的脚本
- Flink 读取 Mysql
- kafka--Struct Streaming--console案例入门
- AtCoder Beginner Contest 137 解题报告(A ~ E)
- arm服务器虚拟x86,云服务器arm64和x86
- 1218 正方形还是圆形
- 内网/外网介绍以及两者比较
- flex:1代表什么
- A3NCF: An Adaptive Aspect Attention Model for Rating Prediction
- 大爽pygame入门教程 第一节 基础知识
- 2012-10-19《商业英语中的加班表达…
- 计算机在英语写作中应用,信息化背景下计算机反馈技术在英语写作中应用.doc...