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

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

    博客分类:
  • java
阅读更多

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

分享到:
评论
42 楼 fyting 2009-09-02  
advantech 写道
Spring的代码难读那Linux核心的代码就是天书,我们是拿框架写应用的,不是做基础研究的,你的关注点应该是怎么为你的客户提供优质的产品。

看代码和做产品这两者没必然冲突啊,有吗?
41 楼 solonote 2009-09-02  
我不太理解你说的这种场景和接口有什么关系,做个假的就是做一个Mock的意思吧.
"假的"和接口又有什么关系,你用Class类就不能做Mock了?
接口的作用就是让程序依赖于抽象,而不是具体实现,而依赖于抽象的价值就是在于有多个实现.
40 楼 pipilu 2009-09-02  
solonote 写道

没有什么东西是只依赖抽象的.记得当年看到很多人写SSH的时候,每个DAO必然有一个接口.美名其曰最佳模式,但是有何价值?所有DAO都只有一个实现.
产生抽象必然需要两个以上的具体实现.否则只是在增加维护成本.


不一定,我开发的时候,有时候一个实现,一时半会儿完不成,就先做个假的来让整体程序先能简单的跑起来。等实现完了,再把真的给装配上去。这种情况下,一个接口,真正的实现只有一个。
这样做至少方便多人并行的开发。
39 楼 dinguangx 2009-09-02  
怎么大家喜欢全文引用呢,这样看文章挺累的!
38 楼 mesmes 2009-09-02  
fyting 写道
侵入与非侵入不重要,关键是代码好测试,好维护,出了错好找。简单的东西就没必要一定用啥框架了,三下五除二,怎么简单怎么弄;复杂的,自然而然会分出多层,出错时多半是业务上的问题,和框架关系甚小……所以,好测试就可以了……spring就是太学究了一点,源码里到处可见又臭又长的类继承关系,又臭又长的方法名,然后一堆javadoc,某某某protected的方法是做什么用的

不知道这位高手读spring源码读到什么程度了。
37 楼 solonote 2009-09-02  
入侵不入侵有什么关系,Spring入侵性确实很小.标准的JavaBean Ioc.
另外,你更换Ioc框架的概率有多大?如果Spring不适合你的项目,那你一开始就不应该使用它.
Spring和其他框架本身就是根据业务选择的,要使用必然会产生依赖.
没有什么东西是只依赖抽象的.记得当年看到很多人写SSH的时候,每个DAO必然有一个接口.美名其曰最佳模式,但是有何价值?所有DAO都只有一个实现.
产生抽象必然需要两个以上的具体实现.否则只是在增加维护成本.

所以你真的需要一个无入侵性的可随意切换的框架吗?你的应用真的会需要两种Ioc框架吗?
36 楼 lishuaibt 2009-09-02  
当一个东西成为标准的时候 。。。 一切都在发生变化  不是吗?
35 楼 kaki 2009-09-02  
很多人都希望通过简短的代码来实现复杂的应用,框架是必由之路。
34 楼 advantech 2009-09-01  
Spring的代码难读那Linux核心的代码就是天书,我们是拿框架写应用的,不是做基础研究的,你的关注点应该是怎么为你的客户提供优质的产品。
33 楼 fyting 2009-09-01  
侵入与非侵入不重要,关键是代码好测试,好维护,出了错好找。简单的东西就没必要一定用啥框架了,三下五除二,怎么简单怎么弄;复杂的,自然而然会分出多层,出错时多半是业务上的问题,和框架关系甚小……所以,好测试就可以了……spring就是太学究了一点,源码里到处可见又臭又长的类继承关系,又臭又长的方法名,然后一堆javadoc,某某某protected的方法是做什么用的
32 楼 downpour 2009-09-01  
楼主,我们的讨论就此为止,你所有的观点都是在胡扯。

所谓的代码入侵,都谈到Web层去了,还有什么好讨论的余地?

我可以很负责的告诉你,我所有的业务逻辑代码,不仅可以使用Spring进行IoC容器的管理,也可以使用Guice来代替。

什么是标准?大家为什么要遵循标准?setter和getter方法算不算标准?所有的框架的实现,都有前提,目前来说,基于JavaBean的实现比较容易被大家接受,因为这种实现方式,对测试和容器没有额外的依赖,只需要基于JDK就完事了。这难道还不够标准?

所以,至今为止,完全不知道楼主到底想表达什么观点,说明什么问题,这种讨论毫无意义,浪费时间。
31 楼 pipilu 2009-09-01  
ferreousbox 写道
从代码的角度讲,以减少框架代码依赖和提供可测试性的这种非侵入是有意义的我赞同;
从框架的角度讲,如果没有提供高度可剥离性和无缝切换,那非侵入就是没有意义的(如JPA就是反例);

所以我一开始站的角度是第2种,而非代码;

TO:pipilu
    你说的这个意义就是一种标准化

TO:herowzz
    我说的是站在框架无侵入的角度不做任何修改


我说的可不是标准化的东西。我说的是:根据框架的含义,你提的那个所谓的“非侵入”根本就不是框架要解决的。而且是恰恰相反,框架就要限制你一部分自由。在一些方面给你“绑定到框架上”,在另一些方面又给你开放,任你发挥。
30 楼 yangyi 2009-09-01  
侵入与否我觉得并不重要,重要的是在使用上学习简单(学习曲线),用起来不让人迷惑(Too much magic),修改和维护方便,解决了某一方面的问题(有用)
敏捷开发中的敏捷设计并不是让你过度设计的,不修改一行代码的随需而变目前只是理想
29 楼 150531932 2009-09-01  
    LZ你所叙述的问题并不是“侵入性”,而是“兼容性”,知道吗,你想从spring框架平滑的过滤到其他框架,这并不是因为spring的“侵入性”问题,而是,框架之间的兼容性。而且我们说的“侵入性”也是从一定角度来说的,并没有绝对的无“侵入性”,但是相比EJB而言,spring在这方面作的是很好的。
28 楼 ferreousbox 2009-09-01  
从代码的角度讲,以减少框架代码依赖和提供可测试性的这种非侵入是有意义的我赞同;
从框架的角度讲,如果没有提供高度可剥离性和无缝切换,那非侵入就是没有意义的(如JPA就是反例);

所以我一开始站的角度是第2种,而非代码;

TO:pipilu
    你说的这个意义就是一种标准化

TO:herowzz
    我说的是站在框架无侵入的角度不做任何修改
27 楼 nmvr2600 2009-09-01  
引用
我这里说到的“入侵”并不仅仅指业务层,一般也是建议业务层是不依赖任何框架和组件的,毕竟是系统的核心处理层。但还有其他各个层,如视图、控制等。我一开始也就阐明了一旦你一开始使用这类框架,就已经实际上被框架隐式入侵了。

这还是一个如何界“入侵”的问题吧。如果所系统核心不依赖任何框架和组件,那么JDK里面的东西你算不算?

在spring文档里它把自己的声明式的事务作为一个非侵入的典型。所谓的non-invasiveness,就是框架不强迫必须引入一些特定的类型或者借口到你自己的业务或者领域模型里去(也就是说代码里可以没有显式的依赖)。

如果你认为只要运行时需要,就叫入侵了,那么大家对这个“入侵”的界定就有些不同。
26 楼 herowzz 2009-09-01  
ferreousbox 写道

你也没看懂我的意思,我不是针对业务层来说事,你说的业务层无非是不依赖spring的类而已。难道你的业务层仅仅是来依靠spring做依赖注入?如果你使用了spring特有的功能(可能也不一定是特有的),那么表示已经被入侵了。我也一直强调并非一定是代码级别的入侵,明白不?

简单的说,你的系统离开spring或者简单的换个其他类似框架还能够跑么?

这就是我一开始就提到的:“非侵入”到底是什么意思?我的理解是不仅仅是代码的不侵入,而应该是类似于依赖接口而非实现的意思。

或许大家看问题的角度不一样,所以理解的也不一样。


我业务层中为什么要使用spring特有的功能,况且,spring的功能和业务层一点联系都没有?
我的业务层的确是仅仅使用spring的ioc和aop,不知道您还依靠spring做了什么?
简单的说,我的系统离开spring换个类似框架照样可以跑起来。
如果你觉得跑不起来,请举例。
25 楼 pipilu 2009-09-01  
ferreousbox 写道
我这里说到的“入侵”并不仅仅指业务层,一般也是建议业务层是不依赖任何框架和组件的,毕竟是系统的核心处理层。但还有其他各个层,如视图、控制等。我一开始也就阐明了一旦你一开始使用这类框架,就已经实际上被框架隐式入侵了。

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


在《WebWork In Action》中有关于“框架”这个概念的解释,说“框架的强大之处不是源自它能让你做什么,而是它不能让你做什么”,“框架使混乱的东西变的结构化”,“一种极端是框架消失了,一片混乱;另一种极端是框架留给你的选择太少,以至于你无法完成程序”……从这处解释来看,框架就是要你不要有太多的选择。所以不知道你指的“没有侵入”的框架是什么?什么会需要灵活切换框架?

我们用jquery或mootools框架时,它返回的一个Element对象,可能就和DHTML自身的Element对象不一样了,这样我们就不得不继续依赖原来用的框架。想要灵活替换或可以有很多选择?我觉得你可能想要的是一个组件——一个帮你完成一些功能的组件,但又不妨碍你使用什么框架或者不使用框架。
24 楼 daquan198163 2009-09-01  
ferreousbox 写道
herowzz 写道
ferreousbox 写道
我这里说到的“入侵”并不仅仅指业务层,一般也是建议业务层是不依赖任何框架和组件的,毕竟是系统的核心处理层。但还有其他各个层,如视图、控制等。我一开始也就阐明了一旦你一开始使用这类框架,就已经实际上被框架隐式入侵了。

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



你说来说去怎么感觉你总说不到点上呢?
框架到底哪里侵入业务层了?说半天说不出个所以然来。
说不出来就拿代码举例,本来业务层是怎么写的?用了框架后又怎么写了?把框架去了又出现怎么问题了?

友情提示:你举spring例子是最错误的,spring的侵入性是最低的


你也没看懂我的意思,我不是针对业务层来说事,你说的业务层无非是不依赖spring的类而已。难道你的业务层仅仅是来依靠spring做依赖注入?如果你使用了spring特有的功能(可能也不一定是特有的),那么表示已经被入侵了。我也一直强调并非一定是代码级别的入侵,明白不?

简单的说,你的系统离开spring或者简单的换个其他类似框架还能够跑么?


这就是我一开始就提到的:“非侵入”到底是什么意思?我的理解是不仅仅是代码的不侵入,而应该是类似于依赖接口而非实现的意思。

或许大家看问题的角度不一样,所以理解的也不一样。

其实吧,非侵入性的好处从来就不是方便切换框架,而是方便单元测试,
如果看过他的两本书的话应该知道,Rod是TDD的坚定支持者,它多次强调:好的框架应该让基于它开发的组件容易测。
所以说,即便基存在你说的这个隐式侵入的问题,代码的非侵入性也仍然是有意义的,不是扯淡的。

而且我也看不出来,既然框架代码没有侵入你的组件,为什么离开spring或者简单的换个其他类似框架就不能跑了,
也许妨碍你切换框架的原因是没有一个足够强大的候选项可以代替spring吧,那这也不是侵入性造成的。
23 楼 ferreousbox 2009-09-01  
herowzz 写道
ferreousbox 写道
我这里说到的“入侵”并不仅仅指业务层,一般也是建议业务层是不依赖任何框架和组件的,毕竟是系统的核心处理层。但还有其他各个层,如视图、控制等。我一开始也就阐明了一旦你一开始使用这类框架,就已经实际上被框架隐式入侵了。

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



你说来说去怎么感觉你总说不到点上呢?
框架到底哪里侵入业务层了?说半天说不出个所以然来。
说不出来就拿代码举例,本来业务层是怎么写的?用了框架后又怎么写了?把框架去了又出现怎么问题了?

友情提示:你举spring例子是最错误的,spring的侵入性是最低的


你也没看懂我的意思,我不是针对业务层来说事,你说的业务层无非是不依赖spring的类而已。难道你的业务层仅仅是来依靠spring做依赖注入?如果你使用了spring特有的功能(可能也不一定是特有的),那么表示已经被入侵了。我也一直强调并非一定是代码级别的入侵,明白不?

简单的说,你的系统离开spring或者简单的换个其他类似框架还能够跑么?


这就是我一开始就提到的:“非侵入”到底是什么意思?我的理解是不仅仅是代码的不侵入,而应该是类似于依赖接口而非实现的意思。

或许大家看问题的角度不一样,所以理解的也不一样。

相关推荐

    非侵入式负荷监测

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

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

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

    非侵入式负荷分解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