|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
令人可喜的是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说到:
通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。 |
|