`
ferreousbox
  • 浏览: 287475 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

再谈开源框架的“非侵入”还有意义吗?

    博客分类:
  • java
阅读更多

    "非侵入“这词应该是spring最开始主打的口号吧,也唱响了新一代开源框架的发展潮流,君不见目前非常多的框架都在大谈自己是”非侵入“式的,程序员也在津津乐道”非侵入“式的好处,我个人认为,最开始”非侵入“背后的意义应该是框架的灵活切换,而不仅仅是代码中的”非侵入“,而如今,spring、struts等,虽然可以实现代码的”无侵入“,但背后的”已绑定“似乎已经违背了初衷。那再谈”非侵入“还有何意义?

分享到:
评论
62 楼 di1984HIT 2014-01-03  
讨论的好激烈。
61 楼 belover 2009-09-05  
pipilu 写道
哎,真服了。你是为了证明你提的问题是合理的,还是为了探求答案?
赶快隐藏吧。


同意楼上!

很难想象。在 javaeye 这种深度交流的技术社区。还有这么没有任何实际意义的讨论!
楼主下课吧!
60 楼 pipilu 2009-09-04  
哎,真服了。你是为了证明你提的问题是合理的,还是为了探求答案?
赶快隐藏吧。
59 楼 herowzz 2009-09-04  
如果说到标准的话,spring本来就是反标准的。
再说,用标准就不被入侵了?现在有几个程序是用标准写的?标准还不都是那些厂商们你定一套,我定一套。使用ejb,jsf等等你就可以随意更换到别的框架吗?
如果照你那样理解入侵的话,那任何第三方框架都别使用了,直接jdbc,servlet最符合您的要求?
58 楼 qianhd 2009-09-04  
其实都是一场梦
随便一个需求的修改 都可以让框架侵入的体无完肤
57 楼 ferreousbox 2009-09-04  
随着大家的关注点和出发角度不同,问题就像wq163说的已经扩散了,往往有些朋友就抓住言论中的一些关键字来进行辩驳,所以难免会出现争执和意见不统一,这往往也是思想的碰撞。所以,我认为我们讨论的前提应该是基于一个共同的认识,那就是怎么界定“入侵”?

从狭义的角度讲,直接对框架代码的依赖,这是无可厚非被大家认同的直接入侵;

从广义的角度讲,只要你使用了就是被入侵了,当然这里还有一个度和界限的问题,这里的界限和度我理解为标准,即使用标准的东西是可以被认为非入侵的,因为是依赖标准而非具体实现。好比我们使用JDBC框架或OSGI框架,这是依赖标准。

而spring等提出的非入侵就像前面有朋友提到的是基于单元测试的易用性和非依赖性的这样一个维度,但是我也要说,在什么都可以MOCK的年代入侵不入侵真的还那么重要么?

另外,我的初衷并不是说因为入侵而不使用,而是说不要因为非入侵而刻意非入侵!
56 楼 delphixp 2009-09-04  
很多人对于“非侵入”这个概念的感知,都是来自那本《without EJB XXX》的吧?

就这本书来说说“非侵入”的含义:

  1)使用容器的同时,无须实现(继承)容器的任何接口(类)。相比于旧版的EJB,你必须要实现相应的接口。

  2)在进行测试时(例如TDD),可以使用灵活的测试方法。(例如用 JUNIT,或者一个main 方法)相比于旧版的EJB,每次测试都要花相当时间等待容器的停止/启动,要脱离容器来做测试的话,比较困难或麻烦。

应该说,这种“非侵入”性是相对于旧版的EJB而言。使用流行语来说就是,旧版的EJB容器是“重侵入”的,是一种卖身的关系。而对于 Spring 这种容器来说,是“轻侵入”的,是一种合作关系。

完全没有侵入性,是不存在的。只要你用框架,你就必须要遵守框架所制定的“游戏规则”。这种规则不是要求你调用/创建框架对象,就是要求你实现/继承框架接口/类,又或者某种特定的配置文件。不要认为只需要配置文件,就没侵入性,配置文件是“侵入”到系统,而不是代码而已。

所以,对于“非侵入”性的理解,更多是:尽量减少框架“入侵”到你的代码中去。要知道,错误、复杂度等都具有传递性,代码越是“纯洁”就意味着更少依赖性,更好的维护性。

55 楼 herowzz 2009-09-04  
wq163 写道

什么是入侵每个人都有自己的观点,
lz可能是说一旦用了spring就不可能脱离它了,接着后面又有人说可以切换其他容器来反驳,
然后又有人说没有切换的必要,……
问题扩散开了争论就多了,根据自己的尺度定义入侵就行啦,
各位好好定义一下入侵的范畴  继续发表高见,我撤了


“什么是入侵每个人都有自己的观点”
扯蛋,自己没弄明白什么是入侵就不要在这高谈阔论
54 楼 wq163 2009-09-03  
downpour 写道
wq163 写道

对于入侵定义的级别不同,以你的目标来定义入侵的范畴,那么你这样说是对的。
但是你不能限制别人也按照你的目标来定义入侵。单元测试不依赖其他jar不能说明就没有入侵,运行、集成测试时还是会依赖的。
这种东西争来争去其实没意思的,呵呵


集成测试你能不依赖容器?不依赖容器算集成测试吗?

所以讨论的首要条件就是定义入侵的范畴。你说说看,什么是入侵?

什么是入侵每个人都有自己的观点,
lz可能是说一旦用了spring就不可能脱离它了,接着后面又有人说可以切换其他容器来反驳,
然后又有人说没有切换的必要,……
问题扩散开了争论就多了,根据自己的尺度定义入侵就行啦,
各位好好定义一下入侵的范畴  继续发表高见,我撤了
53 楼 downpour 2009-09-03  
wq163 写道

对于入侵定义的级别不同,以你的目标来定义入侵的范畴,那么你这样说是对的。
但是你不能限制别人也按照你的目标来定义入侵。单元测试不依赖其他jar不能说明就没有入侵,运行、集成测试时还是会依赖的。
这种东西争来争去其实没意思的,呵呵


集成测试你能不依赖容器?不依赖容器算集成测试吗?

所以讨论的首要条件就是定义入侵的范畴。你说说看,什么是入侵?
52 楼 wq163 2009-09-03  
downpour 写道
wq163 写道

lz说得不是代码级别的入侵,怎么这么多人都不理解呢,就算没有引入任何spring的代码,也是有隐式入侵的。
一旦用了它的IOC其实就已经被绑架了。你的各种依赖关系都依靠它来管理,脱离不了spring了。
切换其他类似的IOC容器理论上或者小项目中可以,但在大规模项目中完全是不可能的,你不可能把那么多依赖关系再配置一遍


你告诉我,什么是隐式入侵?发表观点之前,先要弄清楚概念。

Service调用Dao,他们之间的依赖关系,是如何定义的?如果没有容器,没有Spring,你能分别吗?显然不能。因为他们之间的依赖关系是通过setter和getter方法维护的。这种维护方式,哪里入侵到什么容器了?相反的,如果其他的IoC容器,需要通过依赖它的代码来管理依赖关系,那才叫真正的入侵。

所以,所谓的入侵与不入侵,都是相对于容器本身的实现规则而定的。按照你的说法,在大规模项目中,我的确不可能吧那么多的依赖关系再配置一遍,所以我也不会去切换IoC容器,因为那没有必要。我们的目标是,让我们的业务逻辑代码,能够在不依赖于其他jar包的情况下能够方便的进行单元测试。这才是我们将代码写得不入侵的目的。

对于入侵定义的级别不同,以你的目标来定义入侵的范畴,那么你这样说是对的。
但是你不能限制别人也按照你的目标来定义入侵。单元测试不依赖其他jar不能说明就没有入侵,运行、集成测试时还是会依赖的。
这种东西争来争去其实没意思的,呵呵,我闪了
51 楼 downpour 2009-09-03  
wq163 写道

lz说得不是代码级别的入侵,怎么这么多人都不理解呢,就算没有引入任何spring的代码,也是有隐式入侵的。
一旦用了它的IOC其实就已经被绑架了。你的各种依赖关系都依靠它来管理,脱离不了spring了。
切换其他类似的IOC容器理论上或者小项目中可以,但在大规模项目中完全是不可能的,你不可能把那么多依赖关系再配置一遍


你告诉我,什么是隐式入侵?发表观点之前,先要弄清楚概念。

Service调用Dao,他们之间的依赖关系,是如何定义的?如果没有容器,没有Spring,你能分别吗?显然不能。因为他们之间的依赖关系是通过setter和getter方法维护的。这种维护方式,哪里入侵到什么容器了?相反的,如果其他的IoC容器,需要通过依赖它的代码来管理依赖关系,那才叫真正的入侵。

所以,所谓的入侵与不入侵,都是相对于容器本身的实现规则而定的。按照你的说法,在大规模项目中,我的确不可能吧那么多的依赖关系再配置一遍,所以我也不会去切换IoC容器,因为那没有必要。我们的目标是,让我们的业务逻辑代码,能够在不依赖于其他jar包的情况下能够方便的进行单元测试。这才是我们将代码写得不入侵的目的。
50 楼 wq163 2009-09-03  
daquan198163 写道
wq163 写道
iday 写道
ferreousbox 写道
我这里说到的“入侵”并不仅仅指业务层,一般也是建议业务层是不依赖任何框架和组件的,毕竟是系统的核心处理层。但还有其他各个层,如视图、控制等。我一开始也就阐明了一旦你一开始使用这类框架,就已经实际上被框架隐式入侵了。

前面有朋友提到实现和接口的绑定可以采用其他IOC容器,我想这位朋友根本就没有仔细想这类问题,这里已经不再是简单的IOC问题了,即使你举这样的例子也是不恰当的,你想,如果你使用spring的事务管理(举个例子),你想还有其他实现一样功能的框架来给你用么?这就是标准化于非标准化的问题!所以我的意思是在没有成为标准的前提下谈非入侵都是不必要的,即使是事实标准。而且你也不用刻意的在你的系统中避免导入代码依赖,因为你根本不可能再脱离这个框架了,这就是实质问题!!!


你一直在说什么隐式入侵,指的是代码的入侵么?你说的spring事务的例子,我用到现在都是用aop注入spring事务的,这应该不算是入侵了吧。是不是真的代码入侵,完全是看你的代码怎么写的,如果没有能力做到代码不入侵,那也就不要谈这个问题了。所以Rod Johnson能写出spring,而我们还在这里讨论spring到底侵入了没有。


lz说得不是代码级别的入侵,怎么这么多人都不理解呢,就算没有引入任何spring的代码,也是有隐式入侵的。
一旦用了它的IOC其实就已经被绑架了。你的各种依赖关系都依靠它来管理,脱离不了spring了。
切换其他类似的IOC容器理论上或者小项目中可以,但在大规模项目中完全是不可能的,你不可能把那么多依赖关系再配置一遍

这有什么,要是以后真出来一个新的ioc容器,兼容spring是完全有必要的,也是不难做到的,
wps还兼容office呢。
ps:看不出有什么必要去切换IoC容器。

看到前面有人说,不绑定在Spring上为什么不能使用其他的IoC实现,我是为了说明切换容器不是想象的那么简单。
至于说新的容器兼容spring,那就是另外一个话题了
49 楼 eric860 2009-09-03  
其实就是LZ在“非入侵”的理解上走极端了。
48 楼 daquan198163 2009-09-03  
wq163 写道
iday 写道
ferreousbox 写道
我这里说到的“入侵”并不仅仅指业务层,一般也是建议业务层是不依赖任何框架和组件的,毕竟是系统的核心处理层。但还有其他各个层,如视图、控制等。我一开始也就阐明了一旦你一开始使用这类框架,就已经实际上被框架隐式入侵了。

前面有朋友提到实现和接口的绑定可以采用其他IOC容器,我想这位朋友根本就没有仔细想这类问题,这里已经不再是简单的IOC问题了,即使你举这样的例子也是不恰当的,你想,如果你使用spring的事务管理(举个例子),你想还有其他实现一样功能的框架来给你用么?这就是标准化于非标准化的问题!所以我的意思是在没有成为标准的前提下谈非入侵都是不必要的,即使是事实标准。而且你也不用刻意的在你的系统中避免导入代码依赖,因为你根本不可能再脱离这个框架了,这就是实质问题!!!


你一直在说什么隐式入侵,指的是代码的入侵么?你说的spring事务的例子,我用到现在都是用aop注入spring事务的,这应该不算是入侵了吧。是不是真的代码入侵,完全是看你的代码怎么写的,如果没有能力做到代码不入侵,那也就不要谈这个问题了。所以Rod Johnson能写出spring,而我们还在这里讨论spring到底侵入了没有。


lz说得不是代码级别的入侵,怎么这么多人都不理解呢,就算没有引入任何spring的代码,也是有隐式入侵的。
一旦用了它的IOC其实就已经被绑架了。你的各种依赖关系都依靠它来管理,脱离不了spring了。
切换其他类似的IOC容器理论上或者小项目中可以,但在大规模项目中完全是不可能的,你不可能把那么多依赖关系再配置一遍

这有什么,要是以后真出来一个新的ioc容器,兼容spring是完全有必要的,也是不难做到的,
wps还兼容office呢。
ps:看不出有什么必要去切换IoC容器。
47 楼 wq163 2009-09-03  
iday 写道
ferreousbox 写道
我这里说到的“入侵”并不仅仅指业务层,一般也是建议业务层是不依赖任何框架和组件的,毕竟是系统的核心处理层。但还有其他各个层,如视图、控制等。我一开始也就阐明了一旦你一开始使用这类框架,就已经实际上被框架隐式入侵了。

前面有朋友提到实现和接口的绑定可以采用其他IOC容器,我想这位朋友根本就没有仔细想这类问题,这里已经不再是简单的IOC问题了,即使你举这样的例子也是不恰当的,你想,如果你使用spring的事务管理(举个例子),你想还有其他实现一样功能的框架来给你用么?这就是标准化于非标准化的问题!所以我的意思是在没有成为标准的前提下谈非入侵都是不必要的,即使是事实标准。而且你也不用刻意的在你的系统中避免导入代码依赖,因为你根本不可能再脱离这个框架了,这就是实质问题!!!


你一直在说什么隐式入侵,指的是代码的入侵么?你说的spring事务的例子,我用到现在都是用aop注入spring事务的,这应该不算是入侵了吧。是不是真的代码入侵,完全是看你的代码怎么写的,如果没有能力做到代码不入侵,那也就不要谈这个问题了。所以Rod Johnson能写出spring,而我们还在这里讨论spring到底侵入了没有。


lz说得不是代码级别的入侵,怎么这么多人都不理解呢,就算没有引入任何spring的代码,也是有隐式入侵的。
一旦用了它的IOC其实就已经被绑架了。你的各种依赖关系都依靠它来管理,脱离不了spring了。
切换其他类似的IOC容器理论上或者小项目中可以,但在大规模项目中完全是不可能的,你不可能把那么多依赖关系再配置一遍
46 楼 jnoee 2009-09-03  
怎么不拿Rails来说事呢?在应用的层面其实没有必要去考究这些,尽快的为客户提供软件价值是首要的目标。在一个成熟的应用框架面前,无所谓侵入不侵入,因为你更换框架的几率为0。如果你最终真的要更换这个框架,那只能说你最开始的选择就是错误的。IOC容器会使得这种错误付出的代价略微变小一点。

赞同solonote观点。
在未知面前才需要灵活,杞人忧天那是自寻烦恼。很多人还在为了接口而接口,为了虚无缥缈而灵活设计。在应用的层面上,一个DAO一个接口、一个service一个接口,理由还非常的冠冕堂皇,非常可悲。

45 楼 iday 2009-09-02  
ferreousbox 写道
我这里说到的“入侵”并不仅仅指业务层,一般也是建议业务层是不依赖任何框架和组件的,毕竟是系统的核心处理层。但还有其他各个层,如视图、控制等。我一开始也就阐明了一旦你一开始使用这类框架,就已经实际上被框架隐式入侵了。

前面有朋友提到实现和接口的绑定可以采用其他IOC容器,我想这位朋友根本就没有仔细想这类问题,这里已经不再是简单的IOC问题了,即使你举这样的例子也是不恰当的,你想,如果你使用spring的事务管理(举个例子),你想还有其他实现一样功能的框架来给你用么?这就是标准化于非标准化的问题!所以我的意思是在没有成为标准的前提下谈非入侵都是不必要的,即使是事实标准。而且你也不用刻意的在你的系统中避免导入代码依赖,因为你根本不可能再脱离这个框架了,这就是实质问题!!!


你一直在说什么隐式入侵,指的是代码的入侵么?你说的spring事务的例子,我用到现在都是用aop注入spring事务的,这应该不算是入侵了吧。是不是真的代码入侵,完全是看你的代码怎么写的,如果没有能力做到代码不入侵,那也就不要谈这个问题了。所以Rod Johnson能写出spring,而我们还在这里讨论spring到底侵入了没有。
44 楼 wisdomer 2009-09-02  
建议直接写二进制机器代码,这样就没有入侵了。
43 楼 Discry 2009-09-02  
fyting 写道
advantech 写道
Spring的代码难读那Linux核心的代码就是天书,我们是拿框架写应用的,不是做基础研究的,你的关注点应该是怎么为你的客户提供优质的产品。

看代码和做产品这两者没必然冲突啊,有吗?

楼主这个问题本身就没什么意义嘛

相关推荐

    非侵入式负荷监测

    非侵入式负荷监测技术是一门新兴的技术,它用于监测和分析用电设备在运行中的电力消耗情况,而无需直接接触设备本身。非侵入式负荷监测的应用范围很广,包括家用电器、工业设备以及电网的负载分析等。 在非侵入式...

    基于云平台的非侵入式负荷监测与识别系统

    为了适应这一需求,"基于云平台的非侵入式负荷监测与识别系统"应运而生,该系统的技术创新和应用前景极具潜力。 首先,让我们来深入探讨一下非侵入式负荷监测与识别系统的设计初衷和工作原理。传统上,电力消耗的...

    非侵入式负荷分解PDF版代码.pdf

    非侵入式负荷分解代码。。 简单版实现。只是让大家看懂。并理解什么是电力负荷分解。非侵入式电力负荷监测,简单来说,就是通过家庭入口处(就是电表)的各项特征(就是有功,电流,电压什么的),用各种算法来得到...

    非侵入式负荷分解NILM的实用安装包NILMTK

    NILMTK(Non-Intrusive Load Monitoring Toolkit)是一个开源的Python库,专门用于进行非侵入式负荷分解的研究和应用。这个实用安装包包含了处理和分析负荷分解数据所需的各种工具和算法,使得研究人员和工程师能够...

    kernelcss非侵入性语义化css和JavaScript框架

    kernel.css 是一个非侵入性的语义化CSS和JavaScript框架,旨在提高网页开发的效率和可维护性。这个框架的核心理念是将样式和行为分离,同时保持代码的清晰和易于理解,这对于大型项目的开发尤其重要。 在CSS方面,...

    非侵入式负荷监测与分解研究综述

    非侵入式负荷监测与分解研究综述非侵入式负荷监测与分解研究综述非侵入式负荷监测与分解研究综述非侵入式负荷监测与分解研究综述非侵入式负荷监测与分解研究综述

    非侵入式负荷神经网络遗传算法模式识别

    本文非侵入式负荷识别,提取特征,通过神经网络模式识别,混沌矩阵,遗传算法有效地识别出用电设别

    用于非侵入式负载监控(能量分解)的迁移学习

    非侵入式负载监控(NILM)是一种技术,它允许我们监测家庭或建筑物中的电力消耗,而无需在每个电器上安装单独的传感器。这主要通过分析总的电表读数来实现,通过分解总能耗来识别各个设备的功率使用情况。在“用于非...

    Android 热更新——非侵入AOP框架

    该框架基于AOP思想,支持...Dexposed是基于久负盛名的开源Xposed框架实现的一个Android平台上功能强大的无侵入式运行时AOP框架。Dexposed的AOP实现是完全非侵入式的,没有使用任何注解处理器,编织器或者字节码重写器。

    %E7%94%A8%E7%94%B5%E6%A3%80%E6%B5%8B.zip_非侵入_非侵入式

    标题中的“%E7%94%A8%E7%94%B5%E6%A3%80%E6%B5%8B.zip_非侵入_非侵入式”翻译成中文是“用电检测.zip_非侵入_非侵入式”,这表明这个压缩包可能包含的是一套关于非侵入式电能监测的技术或应用。非侵入式技术在电能...

    PHP非侵入式监控平台优化性能定位Bug的神器别再让你的PHP程序裸奔

    除了XHGui和XHProf,还有其他非侵入式监控工具,如New Relic、Blackfire.io等,它们提供了丰富的功能,如实时性能监控、代码火焰图、事务追踪等,帮助开发者全面了解应用的健康状况。 总之,PHP非侵入式监控平台是...

    基于低维算子机器学习逼近的非侵入式非线性模型降阶_Non-intrusive Nonlinear Model Reduction

    《基于低维算子机器学习逼近的非侵入式非线性模型降阶》 在当前的科研与工程领域,高维度的动态系统模拟已成为常态,但随之而来的是计算复杂度的急剧增加,使得参数化非线性动态系统的实时分析、设计优化以及控制...

    Android端非侵入式数据采集框架.zip

    在Android平台上,非侵入式数据采集框架是一个重要的技术领域,它允许开发者在不干扰用户正常使用应用的情况下收集必要的数据。这种框架通常用于分析用户行为、性能监控、故障诊断以及优化用户体验。本文将深入探讨...

    阿里非侵入式热修复方案SophixDemo

    Sophix是阿里巴巴开源的、针对Android平台的热修复框架,它允许开发者在不重新发布应用的情况下,对已上线的应用进行功能修复或更新。这一方案极大地提高了开发效率,减少了用户的流失,同时降低了运维成本。 首先...

    Btrace非侵入式调试Java程序神奇linux版

    标题中的“Btrace非侵入式调试Java程序神奇linux版”指出,这是一个专为Linux系统设计的工具,名为Btrace,它主要用于非侵入式的Java程序调试。非侵入式意味着Btrace可以在不修改或重新编译原始Java代码的情况下,对...

    基于小波设计和数据挖掘算法协同训练的非侵入式负载识别.pdf

    通过非侵入式负载识别技术结合小波分析和数据挖掘算法,可以实现对电力消耗行为的详细分析,对于提高能源利用效率和降低能耗具有重要意义。通过这些技术,可以为智能电网、需求侧管理等提供可靠的数据支持,同时促进...

    非侵入式的 iOS 开发网络探测和调试工具,做的超棒.zip

    本文将详细介绍一款名为Xniffer的非侵入式iOS网络探测和调试工具,它基于URLSession构建,专为Swift开发设计。 Xniffer是一个开源项目,这意味着它的源代码对公众开放,开发者可以自由查看、使用、修改和分享。开源...

Global site tag (gtag.js) - Google Analytics