首页 > 其他分享 >zz Spring 是一种反模式

zz Spring 是一种反模式

时间:2024-06-09 11:12:35浏览次数:26  
标签:Java Spring 代码 模式 zz 简单 消亡

Java 将会消亡 – Martin Vysny – 第一性原理思考

原文标题“Java 将会消亡”, 我并不认可 Java 会消亡一说, 作者还处于 FP 亢奋期,而我已经从 FP 回归 OO,这个话题有机会再展开。”Spring 是一种反模式” 是第二节的标题。

让我们引用一下原文:

Spring 是一种反模式

正如上面演示的那样,Spring 是为了弥补 Java 的缺点而发明的,并且自那以后,它不知何故发展成为启动 Java 项目时事实上的首选。引用为什么是 Spring?:

Spring 使 Java 编程对每个人来说都更快、更轻松、更安全。Spring 专注于速度、简单性和生产力,使其成为世界上最受欢迎的 Java 框架。

真是一派胡言。让我们揭穿这个营销垃圾的真面目。但首先,简单和轻松之间有一个非常重要的区别。Spring 允许您以一种简单的方式管理事务,没错,但这样做会带来 20 MB 的垃圾,并迫使您使用依赖注入等复杂模式。而这很难被视为“简单”。在向我讲述简单之前,请尝试调试一个 200 行长的堆栈跟踪,该跟踪指向 Spring 事务魔法深处的某个地方,在抽象和代理的意大利面条中。

轻松编写代码并不意味着最终的解决方案会简单。

**注意这个说法:简单并不等于容易。 simple is not easy.

因此,Spring 代码片段可能看起来很简单,但下面的冰山绝对不简单。
从任何意义上来说,它都不是“更安全”的:只要记住当它突然开始应用恶意拦截器时它是多么安全,因为在beans.xml作为传递依赖项拉入的 jar 中的某个地方有一个隐藏的东西。
速度:是的。在我使用 Spring 开发的应用程序中,你点击运行,等待 30-60 秒,它会初始化 bean,然后才会失败,因为 Spring XML 或@Component其他什么地方的某个深处存在运行时配置错误。
也许在输出代码方面有生产力,但绝对不是在运行速度和可维护性方面。
更快?在什么情况下?绝对不是在运行时:CPU 需要浪费大量周期来处理大量 Spring 抽象和动态生成的代理才能到达您的代码。也许比用普通的 Java 7 编写代码更快。
当然,我可以牺牲一些运行时速度,只要我能得到一些回报。例如,现在我有了 JDK 和 GC,我再也不会使用 C++ 了。但牺牲速度并获得反模式作为回报,这对我来说听起来不是什么好生意。

刚刚读了《为什么我讨厌Spring》(原文链接失效)。

那么,让我们重写上面的 Spring 引言,可以吗?

Spring 使 Java 编程变得更快、更简单。Spring 不知何故成为了世界上最流行的 Java 框架。

是的,没有人因为从 IBM 购买而被解雇,对吧?Spring 的营销非常出色,但也仅此而已。它是一种反模式,在一门不差劲的编程语言中是没有立足之地的。甚至它在 Java8+ 中的使用也值得怀疑。

依赖注入是一种反模式

好的,关于可维护性的话题。随着代码库的扩大,代码的维护变得比开发重要得多。在维护时,你绝对需要完全控制你的代码库。你必须能够清楚地知道给定函数的作用。有关更多详细信息,请参阅我的“代码局部性” 文章。

Spring 和任何依赖注入框架所做的恰恰相反。在@Inject注入东西时,你完全无法控制要注入的内容。它是一个类,还是一个使用某些类定义库的黑魔法动态创建字节码并进行类加载的代理类?它还能序列化吗?不可变的?POJO?几乎不可能!当你调用注入的东西的方法时,会应用哪些拦截器?它们在哪里定义?当我的调试器不断输入名为的动态创建的方法时,我该如何调试这个垃圾$$$Proxy$Whatever?

如果我包含一个 jar,它会突然重新配置 Spring 并添加一些我最初不想要的拦截器,该怎么办?我现在如何推断代码的正确性?

你不能。使用依赖注入,不可能推断代码的正确性,因为你不可能知道还会执行什么。

但不仅依赖注入本身是一种反模式,松散耦合本身也是一种反模式。当然,如果能更清楚地向同事传达你的想法,那么可以添加一两个接口(另请参阅文学编程- 核心思想是你为你的同事而不是计算机编写代码)。但你添加的抽象和松散耦合越多,维护者就越难推理代码本身。

注意:松散耦合本身也是一种反模式,微服务无疑也是,我在解决这个问题,但这是毫无疑问的事实。

所有抽象都是可维护代码的敌人。当它们带来清晰度时使用它们,但要谨慎使用。

Spring 正在杀死 Java

Spring 太难学了:学习曲线的“简单”形象被第一个指向 Spring 深处的庞大堆栈跟踪打破了。Spring 也是一种反模式。它是邪恶的,最好的编程方式是不要使用 Spring。

然而,Spring 现在已经深深扎根于 Java 社区。许多人认为 Java 和 Spring 是不可分割的。然而,Spring 学习起来很困难,维护起来也很麻烦,它正在损害 Java 社区,阻止程序员寻找其他解决方案。它就像一个寄生虫,吸食 Java 宿主并在此过程中杀死宿主。如果 Java 不能摆脱这个寄生虫,它就会随之消亡。而且,Java 毕竟是 Java,我不能说它会被怀念。

Java 8 还行(因为它有闭包)。但 Java 无法与 Kotlin 竞争,未来会遇到困难;它被 Spring 玷污了,这让它的地位更加糟糕。

带有 Spring 的 Java 肯定会消亡。没有 Spring 的 Java 也可能会消亡,但这将需要更长的时间。

另外,不要学习 Spring——投入大量时间去学习一门过时的技术是没有意义的。


对于矮子看戏的大众来说,大家都用 Spring 我为什么不用,那是因为你只写过增删改查没写过真正的程序

作为架构师话我们也喜欢开发一个框架提供简单的界面给下游程序员用,Spring 就是这种类型的东西。但是你要我们自己用,我就要想想值不值了。我主要会看这个框架是不是够薄,是不是可以直接穿透。

遗憾的是,很多公司的程序员入行以后就只能玩spring,没有机会真正的编程了,等他们干了十几年,就误以为这是最好的东西。

反思我自己也是,d2js 设计的比 spring boot 之流好很多,很薄,甚至也可以直通 java,但是同样也有这样的问题,一个 d2js 的高手算是程序员高手吗?答案是显然的。

标签:Java,Spring,代码,模式,zz,简单,消亡
From: https://www.cnblogs.com/inshua/p/18239358

相关文章

  • spring和Mybatis的各种查询
    目录六、MyBatis的各种查询功能6.1、查询一个实体类的对象6.2、查询一个list集合6.3、查询单个数据6.4、查询一条数据为Map集合6.5、查询多条数据为Map集合七、特殊SQL的执行7.1、模糊查询7.2、批量删除7.3、动态设置表名7.4、添加功能获取自增的主键八、自定义映射resultMap一......
  • 单例模式
    单例模式(SingletonPattern),保证一个类只有一个实例,并提供一个全局访问点以供外部代码使用。结构图定义一个私有成员变量instance;构造函数为private私有的;声明了一个名为getInstance的public公有静态方法,返回其唯一实例,供客户端Client使用。单例核心代码(Java实现)publiccl......
  • springboot启动过程、自动装配原理、内置Tomcat启动原理
    一、springboot的启动原理springboot的启动通过在main方法的SpringApplication.run()方法启动@SpringBootApplicationpublicclassShuaApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ShuaApplication.class,args);}}......
  • SpringBoot架构图
    文章目录前言一、SpringBoot架构模块二、SpringBoot架构图总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案......
  • Java项目-基于springboot+vue的音乐网站与分享平台 (源码+数据库+文档)​
    如需完整项目,请私信博主基于SpringBoot+Vue的音乐网站与分享平台开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven音乐网站与分享平台的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、音乐资讯管理、音乐......
  • Java项目-基于springboot+vue的影城管理系统 (源码+数据库+文档)​
    如需完整项目,请私信博主基于SpringBoot+Vue的影城管理系统开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven影城管理系统的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影......
  • Springboot计算机毕业设计疫情下的社区居民管理系统小程序【附源码】开题+论文+mysql+
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在新冠疫情的影响下,社区管理面临着前所未有的挑战。疫情的快速传播要求社区具备更高效、更精准的管理手段,以保障居民的健康与安全。传统的社区管理方......
  • Springboot计算机毕业设计疫情下社区资源分配小程序【附源码】开题+论文+mysql+程序+
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在全球新冠疫情的背景下,社区作为防控疫情的重要阵地,面临着巨大的挑战。随着疫情的持续,社区资源的分配和管理变得尤为重要。然而,传统的资源分配方式往......
  • 基于SpringBoot+Vue的学院党员管理系统设计与实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 2024050801-重学 Java 设计模式《实战策略模式》
    重学Java设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」一、前言文无第一,武无第二不同方向但同样努力的人,都有自身的价值和亮点,也都是可以互相学习的。不要太过于用自己手里的矛去攻击别人的盾......