无论是否使用Spring Framework,为什么我们会失败?

在Twitter领域再次引起了一些反感 ,我看到了Sam Atkinson的博客帖子,题为“ 为什么我讨厌Spring” 。 这篇博客文章的撰写早于2014年,但是DZone后来才真正选择并发布了它。 实际上,在撰写本文时,Atkinson是一名开发人员,正在环球旅行。 因此,他个人对社交媒体一定感到非常惊讶。

Atkinson先生的文章触及了当前Java企业应用程序设计中的几个有趣的问题:XML配置和编译时安全性,魔咒,其他Spring应用程序上下文文件的导入和软件复杂性。 在这篇博客文章中,我将简要介绍这些内容。

我对XML配置并不感到惊讶,但是后来J2EE 1.3拥有处理EJB XML映射文件的可怕经历,因此Hibernate持久性在早期也是如此。 最终,Java SE 5注释和Java EE 5规范帮助改变了一切。 Ruby on Rails的CONVENTION-OVER-CONFIGURATION概念使Java进入了下一阶段。 Spring Framework早在2002年和2003年就以可行的依赖关系注入容器实现进入OSS市场。当时,J2EE 1.3 / 1.4令人震惊,混乱的是容器管理的会话EJB和混乱的实体EJB概念。 没有标准的DI框架,Spring的竞争对手是Pico Container ,更老的Apache Avalon(现在关闭)框架,甚至是Struts 1.x框架。

从2006年开始的几年后,Java EE出现并在编译时为Context and Dependency Injection(CDI)1.0提供了强大的类型安全性。 对于成千上万采用Spring Framework的企业而言,CDI为时已晚,当时大多数企业都在努力从Java 1.4(J2EE 1.4)迁移到Java 5和/或6。十年前的最大问题是使关键任务应用程序保持运行状态在WebLogic Server 7/8或IBM WebSphere 5/6应用程序服务器中。 因此,最先进的技术已经被打破了好几年。 Spring Framework拥有自己的DI容器,而Java EE 6也具有DI容器,因此永远不会碰面。

当它最初被构想时, 依赖注入早在2003年就已陷入僵局,当时花了很多时间才能理解面向对象系统的常见问题。 其中最主要的是应用程序的可测试性和Java对象的替代实现的选择。 在当时,通过将对普通旧Java对象(PO​​JO)的实例化的控制权交给外部框架是非常不寻常的。

在水被打破之后,每个工程师都将类和实现推到了框架中,这很可能是我们现在为此付出的错误。 当软件运行时,注入哪些bean以及在哪个应用程序层运行的魔咒非常神奇,但是,就像Sam Atkinson所说的那样,当您追逐一个错误并通过Spring重构其他团队的依赖关系时,这真是一场噩梦框架。 除了通常的BIT-ROT的人为问题以及软件开发,SILO DIVISION工程的内部投资银行文化之外,Spring框架和其他应用程序框架总是在某个时候会丢失。

Sam Atkinson提到了大型应用程序代码库的典型LAYERING问题,尤其是当源代码分成数百个时。 或偶尔有组织内部成千上万的工程师,测试人员和架构师。 从1.0版开始,Spring框架就已经具有特殊功能, 可以通过在不同的Maven项目中放置不同的bean定义来模块化应用程序上下文文件 。 该概念非常适合使bean定义与定义和使用它们的模块保持一致。

也许这种理念非常适合用于足够小的Maven项目集的应用,一旦组织使用bean定义定义了一百个项目,此技巧就成为了控制的噩梦。 [让我们不要忘记现在的最新状态。]在许多相关的应用程序上下文中,结合魔法咒语,分层和大量Spring bean的委派,可能确实导致了Sam Atkinson的巨大认知负担。 但是,严格来讲,这不是Spring框架,而是“一切都是钉子”的应用。

最后,软件复杂性是许多企业的祸根,而构建足够大的应用程序然后不得不对其进行解密,精简下来并最终加以替换的后果可能会导致人们的冠冕堂皇 。 Java内最大的复杂性项目也许是Oracle和Sun Microsystems对JDK本身的模块化,并且完全不使用依赖项注入容器。 Atkinson谈到了Spring Boot作为围绕框架的框架可能带来的谬论,并且可能存在危险。 他的想法是正确的,因为Java EE还没有关于完全嵌入式应用程序服务器基础结构的标准API或JSR。 [Antonio Gonclaves和其他人,包括我自己,都呼吁将这样的API “一个容器来统治所有人”不止一次地出现。

如果您使用WildFly Swarm之类的产品走这条路,那将存在不确定的路径,因为您的工具链和开发机制可能不会一直支持您。 例如,您的IDE可能无法实现Hot JVM类的重新加载,或者不能对前端页面内容的更改做出很大贡献。 这些所谓的无容器解决方案依赖于已经模块化为单独组件的应用程序的概念。 如果您的应用程序是一个巨大的BEHEMOTH,那么将其转到嵌入式应用程序服务器应用程序中将无济于事。 相反,您需要认真的工作才能到达微服务阶梯的第一个梯级,例如尝试在您自己的组织中取消意大利面条项目和Maven依赖关系。 失败的原因是无法理解大规模的Spring Framework应用程序仅仅是疾病的症状,而不是诊断的症状。

我们为什么要输? 也许是一个问题,为什么我们现在只是失去它? 软件工程中最困难的问题是弄清楚如何使用LEGACY SOFTWARE和DREAMSCAPING。 大多数工程师对遗留软件和技术债务的概念有所了解。 编写无错误,灵活且敏捷的应用程序非常困难; 坚固且具有极高的可维护性。 大多数技术高级管理人员要么忘记了,要么不相信对遗产的影响。

然后,梦想着招聘公司,有时是公司业务向我们出售工程师,设计师和建筑师。 在九到一千万的Java开发人员中,大多数都是所谓的GREENFIELD的诱饵。 除非您从一开始就在一家初创公司工作,否则真的没有这种不起眼的绿色草坪。 即使现有企业催生了SKUNK工作团队,并承诺在几周或几个月内您不必与Legacy合作,您猜怎么着?

您将碰到新的带锁系统和旧版旧系统之间的集成。 萨姆·阿特金森(Sam Atkinson)对Spring框架感到沮丧的呼声的核心是应用程序的架构设计。 在企业现实世界中,绝大多数系统都是BROWNFIELD,请不要让招聘顾问哄骗您。 他本人说,由于该指令TIME-TO-MARKET较旧,他没有时间培训,指导和/或指导组织内的其他开发人员。 这个故事的寓意是,没有道德,只有我们处于运动技术领先的地位,击败Spring Framework,那又如何呢?

我们可以击败Java EE或PHP,Ruby和Scala。 如果我们无法控制自己的直觉,时间压力和设计,良好的老式人性将渗入我们的应用程序,并且我们可以尝试实现100%的代码覆盖率,并使用Cucumber,JBehave编写最佳的功能测试,我们仍然会失败未来几年的应用程序。 软件就是软件,我们大部分时间都在亏损,有时我们会赢。 在何时,何地以及如何实现这一宏伟目标非常困难。

翻译自: https://www.javacodegeeks.com/2015/12/whether-using-spring-framework-not-going-lose.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

endnote能自动翻译吗_自动挡和手自一体有啥区别?从外表能看出一辆车是哪种变速箱吗?...

汽车分自动挡和手动挡,手动挡就是一个手动变速箱,很好理解。但自动挡变速箱有很多种,前几日有人问了这么几个问题,没来得及回复,现在超时不能单独回复了,在此详细说一下,因为这是一个非常基础且…

html5平板电脑,Html5添加支持桌面、移动触摸手机和平板电脑的Lightbox插件教程

一、使用方法首先在标签之前或标签中引入jquery和swipebox js文件。在标签中引入swipebox.css文件。二、Html结构三、调用插件;( function( $ ) {$( .swipebox ).swipebox();} )( jQuery );四、高级配置(1)画廊(2)视频支持My Videos(3)动态调用画廊$( #gallery ).click( functi…

idea 内存溢出解决方法

在Run/Debug configuration 的 vm options里面输入 -server -XX:PermSize128M -XX:MaxPermSize256m 具体如下图: 转载于:https://www.cnblogs.com/Liang-Haishan216/p/7044028.html

网页设计html加音频,HTML5网页中如何嵌入音频,视频?

《HTML5的视频播放控制技术》 介绍了本文主要介绍在HTML5 中如何嵌入音频,视频?在HTML5 中如何嵌入音频?HTML5 支持 MP3、Wav 和 Ogg 格式的音频,代码示例:Your browser does’nt support audio embedding feature.HTM…

seo 伪原创_胡子哥谈seo优化:那些不被了解的伪原创技巧

各位小伙伴们好,我是没有胡子的胡子哥,玩转SEO多年的老互联网人。(胡子哥推出包上首页服务,无效退款,有技术就是敢承诺!)做SEO优化的人都知道,一个网站提升权重的过程中,文章的原创度占比是很高…

javafx2_JavaFX 2 GameTutorial第3部分

javafx2介绍 Ť他是与一个六个部分组成的系列的第3部分的JavaFX 2游戏教程。 如果您错过了第1部分和第2部分 ,我建议您在开始本教程之前仔细阅读它们。 回顾第2部分,我讨论了游戏循环的内部工作原理,其中我们使用动画(JavaFX Time…

03_字体标记

12321321转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7044136.html

dw中html中无法使用js,在Dreamweaver中调用JavaScript行为

调用JavaScript行为可以指定在事件发生时要执行的自定义函数或者JavaScript代码。可以自己书写这些JavaScript代码,也可以使用网络上免费发布的各种JavaScript库。一、Dreamweaver调用JavaScript行为1. 选择一个对象。2. 打开行为面板。3. 点击“添加行为()”按钮&a…

python 渗透框架_Python渗透测试框架:PytheM

PytheM是一个Python渗透测试框架。它只能在osnGNU/Linux OS系统上运行。安装$sudo apt-get update$sudo apt-get install libasound-dev libjack-jackd2-dev portaudio19-dev python-pyaudio build-essential python-dev libnetfilter-queue-dev libespeak1 libffi-dev libssl-…

javaweb可部署目录结构

webApp //项目名称 -META-INF --MANIFEST.MF -WEB-INF --classes //编译class文件 --lib //依赖jar --web.xml -index.jsp //首页转载于:https://www.cnblogs.com/chenweichu/p/7044925.html

带有JBoss工具的OpenShift 3上的Java EE 7应用程序

您可以使用最新版本的JBoss Tools OpenShift插件在Eclipse中创建和管理OpenShift应用程序。 他们要么预先捆绑了最新的 JBoss Developer Studio(9.0.0.GA) ,也可以将它们安装到现有的Eclipse Mars中。 这篇文章将引导您通过JBoss Developer …

上海交大计算机学院奖学金,上海交通大学-电子信息与电气工程学院-学生工作办公室...

各位同学:由于中船奖学金申请人数不够,故申报截止时间推迟到3月23日17:00。公示时间推迟到3月26日-3月28日17:00。请仍想申请本奖学金的同学于3月23日17:00前将材料交至指定地点,特此通知。电院学生办2018年…

自动检测技术学习心得体会_国培计划(2020)—学校管理团队信息化领导力提升培训心得体会...

点击蓝字关注我吧国培计划(2020)—学校管理团队信息化领导力提升培训心得体会2020年10月28日,由裕安区教师进修学校承担的2020年“国培计划(2020)- 学校管理者信息化领导力培训项目在全体学员的期待下正式拉开序幕。精心设计的培训课程精彩纷呈的课堂培训的内容和我…

重装mysql出现无法start service的问题

could not start the service MySQL .error 0 安装时无法启动服务 在MySQL数据库卸载后重装时,一定要将MySQL的相关服务,文件夹,注册表删除彻底 重装前的步骤: 1.打开service.msc关闭MySQL服务 2.控制面板 -> 程序和功能 -…

安宁计算机学院,滁州学院张燕咏、安宁两位教授应邀来我院指导工作

应计算机与信息工程学院邀请,美国罗格斯大学张燕咏教授、合肥工业大学安宁教授于6月9、10日两天来我院进行学术交流和实验室建设方案讨论。6月9日上午,信息学院刘进军、姚光顺两位教师向两位教授汇报了信息学院的实验室建设思路、特别是物联网专业实验室…

六元均匀直线阵的各元间距为_给棉花地选购滴灌带时记住这几点,不再为棉花滴水时发愁...

现在马上进入棉花大量采收阶段,好多农户已经把棉花地里的90管拆了拉回来了,而且不少滴灌带生产厂家也主动和农户联系2021年的滴灌带兑换事项,农户们也在相互打听哪家的质量好、价格合适。选择滴灌带是棉花生产过程中较为重要的环节&#xff0…

Maven下载Sql Server 2008的驱动包

这是对于JRE8所支持的驱动 &#xff0c;JRE7的版本是 6.1.0.jre7&#xff1a; <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>6.1.0.jre8</version> <…

javafx_JavaFX 2 GameTutorial第2部分

javafx介绍 Ť他的是一系列与一个JavaFX 2游戏教程博客条目的第二批。 如果您尚未阅读第1部分&#xff0c;请参阅JavaFX 2游戏教程的简介部分。 在第1部分中&#xff0c;我提到了游戏的一些方面以及原型飞船的简单演示&#xff08;原型由简单的形状组成&#xff09;&#xff0c…

西固哪家计算机学校好,兰州市西固区有什么技术学校和大学

一、招生专业我校设有烹饪技术、计算机应用、商贸营销、空乘预科与外事服务四个专业&#xff0c;共有14个教学班和一个短期培训班。年招生人数280名&#xff0c;在校学生人数613名&#xff0c;累计毕业人数938名。接受职业培训2000余名。二、学校简介兰州市城关职业技术学校成立…

sql 如何根据月份查询数据总数_什么是慢查询?如何通过慢查询日志优化?

日志就跟人们写的日记一样&#xff0c;记录着过往的事情。但是人的日记是主观的(记自己想记的内容)&#xff0c;而数据库的日志是客观的&#xff0c;根据记录内容分为以下好几种日志&#xff1a;a、错误日志&#xff1a;记录启动、运行或停止mysqld时出现的问题。b、通用日志&a…