9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

我们究竟应不应该使用框架?

  • 2019-02-27
  • 本文字数:1445 字

    阅读完需:约 5 分钟

我们究竟应不应该使用框架?

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


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2019-02-27 10:075997

评论

发布
暂无评论
发现更多内容

Kubernetes官方java客户端之七:patch操作

程序员欣宸

4月月更

分布式链路追踪

yuexin_tech

链路追踪

“卷王”英伟达的真面目

脑极体

在线XML美化格式化工具

入门小站

工具

Spring容器的灵魂

IT巅峰技术

Spring 框架漏洞

CDH/HDP迁移之路

星环科技

XX物流同城快递架构设计文档

Steven

李智慧 高并发架构实战课

设计电商秒杀系统

唐尤华

架构实战营

通达快递系统设计

peter

Sophon 3.0全面升级,你准备好拥抱进阶版本的ML建模平台了吗?

星环科技

开源IM项目OpenIM每周迭代版本发布-群管理 阅后即焚等-v2.0.6

Geek_1ef48b

聊聊最近比较火的一款Web3.0应用(25/100)

hackstoic

区块链 gamefi Web3.0 stepn Play2Earn

兑现 Service Mesh 的新价值:精确控制“爆炸半径”

阿里巴巴云原生

Spring容器的核心组件

IT巅峰技术

白话大数据 | 关于图数据库,没有比这篇更通俗易懂的啦

星环科技

开源IM项目OpenIM发布消息推送api,支持应用与IM互通深度融合

Geek_1ef48b

架构实战营毕业总结(第 5 期)

唐尤华

架构实战营

作业七

Geek_f3e842

架构实战营

通过npm+Vant Weapp 构建微信小程序

kcnf

业务流程驱动的数字化转型,中小微企业开启转型的最简单方法论

王吉伟频道

RPA 数字化转型 机器人流程自动化 业务流程自动化

RocketMQ—Producer(二)路由动态更新

IT巅峰技术

Apache RocketMQ

DDD实战(7):战术设计、整体流程与首次冲刺

深清秋

DDD 软件架构设计 生鲜电商系统

maven工具的使用

Rubble

4月日更

Bigdata作业 第五周

Pyel

图数据库渐成技术新风口,星环科技自研图数据库领跑新赛道

星环科技

如何在VC领域脱颖而出,Tiger DAO VC给出答案

BlockChain先知

Linux之lastlog命令

入门小站

Linux

在线条码生成器

入门小站

工具

使用 fluro 转场动画优化页面跳转体验

岛上码农

flutter 移动端开发 安卓开发 4月月更 苹果开发

关于线程池,面试的时候你时候还打怵,这里我有话要说保证让你对线程池的各个参数一边就懂

派大星

线程池

Spring Boot 整合Dubbo + Zookeeper 实现分布式 消费者与服务者的业务调用

Bug终结者

Java dubbo springboot

  • 扫码添加小助手
    领取最新资料包
我们究竟应不应该使用框架?_架构_Jan Stenberg_InfoQ精选文章