仓酷云 发表于 2015-1-18 11:21:41

JAVA编程:我为什么中断利用Spring仓酷云

令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。JohannesBrodwall是一名程序员、办理计划架构师、用户组预会议构造者、集会演讲者与传教师。Johannes一向在尽心尽力地将急迅准绳使用到年夜型软件项目中,不外他真正感乐趣的是与全球的程序员分享更多关于编程的风趣履历。今朝,Johannes就任于Exilesoft,担当首席迷信家一职。克日,Johannes撰写了一篇关于他为什么中断利用Spring的文章,在程序员群体中引发了很年夜的反应。
我之前宣布的一篇题为谦虚的架构师的文章引发了良多争辩,出格是Spring与依附注进框架这个话题,此次我盘算来谈谈为何我要中断Spring。我是挪威最早接纳Spring框架的一批人。我们在开辟一个年夜型体系时最初不能不思索诸如怎样重用XML设置文件的各类分歧机制等成绩。最初,这演化成了@Autowire与component-scan,这类体例办理了大批设置文件的困难,不外却下降了人们懂得全体源代码的才能,这间接招致开辟者被限定在使用中十分小的部分代码中。跟着使用变得愈来愈庞大,文明、工具、文档等工具招致开辟者们不能不在一个个不用要的条理上构建别的一些不用要的条理。
不久以后,我实验在不利用依附注进框架的情形上去构建使用,不外这激发了别的一些成绩,那就是什么时候该利用“new”呢、什么时候利用setter或是机关器参数呢,哪一种范例合适作为依附呢、哪些工具招致了对基本举措措施的耦合呢。
依据直觉我发明DI框架的确可以匡助我改良计划,不外与此同时,我还发明在分开容器时,办理计划变得更小(这很棒!)、了解起来更复杂,而且易于测试。这让我感应势成骑虎,我发明利用容器的价值长短常高的,它会不休增添庞大性与范围,同时会下降分歧性。不外话又说返来,它教会了我一些更棒的计划技能。
总的来讲,我团体以为分歧、小型的体系要比那些为懂得耦而解耦的体系更有代价。分歧性与解耦是对峙的,我站在分歧性这一边。同时,我发明依附注进文明对重用性有更强的偏幸,不外重用会引进耦合。假如模块A重用了模块B,那末我们就说模块A与模块B是耦合的。模块B中的变更大概会对模块A发生更好(修复Bug)或是更糟(引进新的Bug)的影响了局。假如重用所带来的优点更多,那就值得利用;不然就不值得。因而,重用与解耦是对峙的两个方面,我本人更倾向于解耦。假如呈现抵触,我团体以为优先级应当是分歧性年夜于解耦,解耦年夜于重用性,而Spring的基因仿佛与此相反。
Johannes的文章公布后,旋即引发了程序员社区的剧烈会商,有些会商也很成心思,上面摘录几篇:
MarcStock说到:
假如利用Spring的依附注进增添了体系的庞大性,那末成绩的关键在于你本人。我利用Spring有好几年的履历了,它老是让事变变得更棒和更整齐。我不敢说一切的Spring项目都是如许,不外关于依附注进来讲相对没错。也就是说,我发明有良多利用Spring的体例值得商讨,现实上他们做的良多事变都是不用要的(不外他们却其实不这么以为)。假如你能举出Spring依附注进会引发凌乱的例子,我乐意拭目以待。JohannesBrodwall说到:
文章的质疑很不错。我来举个复杂的例子,假设一个体系有良多条理,一切工具都被加上了@Autowire与component-scan。我实验实例化个中的某些服务,不外却短少依附。最初只能将一切的依附加出去来实例化测试中所需的一个复杂服务,由于查找存在哪些依附、应当利用哪些依附来作为摹拟消费了我大批的工夫。HendyIrawan说到:
文中提到“同时,我发明依附注进文明对重用性有更强的偏幸,不外重用会引进耦合。假如模块A重用了模块B,那末我们就说模块A与模块B是耦合的”。这里必要对“模块”做一些廓清。接口会匡助我们更好地舆解。在重用时,利用的是Spring、CDI仍是你本人的甚么工具其实不主要。你提到“Spring文明”,是真的么?举个例子,利用(c3p0)数据源与PlatformTransactionManager(JpaTransactionManager)来设置一个JPAEntityManager(FactoryBean)。这里会有大批的重用,不外解耦性却很不错。你能够将JPA切换到Hibernate,也能够将c3p0却换到其他数据源,还能够将TransactionManager切换到Hibernate或是JTA的。

你厌恶XML设置,也厌恶@Autowired,不外设置总回是要有的。假如喜好set或是new的体例,那末你可使用注解,文中并没有说起这一点。假如利用的是CDI,那末厌恶@Autowired/@Inject无情可原,不外这是Spring,你有良多选择。依据我的履历,关于后端服务绑定利用注解设置,关于UI组件利用@Inject会更好一些。我们也不利用XML,你能够实验一下这类体例。ManuelRascioni说到:

通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。

再见西城 发表于 2015-1-20 13:28:30

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

兰色精灵 发表于 2015-1-24 06:46:19

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

柔情似水 发表于 2015-1-25 19:29:20

是一种语言,用以产生「小应用程序(Applet(s))

海妖 发表于 2015-2-1 09:58:45

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

不帅 发表于 2015-2-3 12:02:02

是一种语言,用以产生「小应用程序(Applet(s))

谁可相欹 发表于 2015-2-8 20:42:41

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

精灵巫婆 发表于 2015-2-16 12:48:42

我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。

透明 发表于 2015-2-28 17:00:25

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

爱飞 发表于 2015-3-5 14:26:05

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

山那边是海 发表于 2015-3-6 07:21:08

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

金色的骷髅 发表于 2015-3-7 10:02:12

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

admin 发表于 2015-3-14 19:57:57

是一种将安全性(Security)列为第一优先考虑的语言

愤怒的大鸟 发表于 2015-3-21 13:35:37

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
页: [1]
查看完整版本: JAVA编程:我为什么中断利用Spring仓酷云