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

【转】侵入式与非侵入式设计的含义

阅读更多

有读者讲“侵入式”这一术语无法理解,这里给一个简单解释,是我个人的看法。

在设计一个类时,按理说,需要考虑的应该只是该类所企图表示的那个“概念”本身:为表示有关概念应记录哪些信息,该类的对象与外界交换信息的界面等等。但定义这个类并不是为了放在那里观赏,而是为了使用。在考虑类对象的使用时,使用环境的一些要素就可能“侵入”这个类的设计之中。实际上,许多情况下我们常常可以在“侵入式”设计和“非侵入式”设计之间做一个选择,不同选择各有优缺点。在考虑非类的程序部分时,这种问题也同样存在。

例如,我们可能需要对类A的对象做引用计数,这里有两种基本可能性:将计数功能纳入类A的设计内(侵入式引用计数设计,此时类A的对象中包含了与引用计数有关的要素,这显然是与类A所要表示的概念无关的东西),或者将计数功能放在类A之外(非侵入式引用计数)。

本书中讨论容器时提出了“侵入式容器”设计和“非侵入式容器”设计的概念:当我们希望将类A的对象放入一种容器时,是否需要将该容器的实现要素“侵入”类A的设计实现之中(这显然是与类A本身并无必然关系的要素)。不同考虑导致不同的容器设计。  

 

我基本上知道了,从夏大虾得著作中得知。
比如struts,需要继承一些struts得类,这就是侵入式,使得系统离不开那个框架。
而spring中,业务类不需要继承框架得类,将来抛弃spring也比较方便。
楼上大虾(土豆块)能否谈下ejb与spring之间得关系。你用ejb吗?如果用了,感觉如何?

 

非侵入式(non-intrusive)设计是目前非常热门的话题。在一般的讨论中,非侵入式设计总是和Spring这样的IoC容器或者AOP技术联系在一起。但是从思想上说,non-intrusive并不等价于IoC或者AOP,它是一个比AOP更加宽泛的概念。
      首先,我们考察一下何谓intrusive。典型的intrusive实现是继承特定的基类, 或者实现特定的接口. 在抽象的意义上说, intrusive意味着在基础结构中预留了一些特殊的,专用的结构, 这些结构对于基础功能而言不仅仅是无用的, 甚至是有害的, 例如影响性能或者模糊了原有的概念结构, 而系统整体的后期扩展能力也受到这些预设的结构通道的限制.
non-intrusive设计的基本特点是尽量利用基础结构的元素, 而不是引入额外的特殊结构.例如, 在witrix平台的tpl模板中
<button tpl:tag="ui:FlatButton" value="xx" onclick="alert('ok')" />
如果后台tpl引擎不解析<ui:FlatButton>标签, 那么该标签的表现就是普通的html button. 这里整个页面的界面表现结构没有被tpl标签所破坏,而如果像jsp tag那样强行规定必须采用节点语法, 即
<ui:FlatButton value="xx" onclick="alert('ok')" />
则在没有tpl引擎的情况下, 界面结构被tpl标签所破坏,此时在dreamweaver这样的可视化工具中我们无法再识别出有效的界面元素, 丧失了WYSIWYG编辑的能力.
tpl:tag属性属于html语法本身规定了的自定义属性, 它在html中的存在是符合规范的, 而且它对于button来说没有造成什么限制或损害, 因而是一种无害的标记. 在没有tpl模板引擎的情况下, tpl:tag属性与其他自定义属性一样处于同样的地位, 没有什么特殊的作用. 而一旦tpl模板引擎识别出该特殊标记, 整个节点就被解释成一个具有丰富表现形式的平面按钮而不是系统缺省风格的普通按钮. 从级列设计的角度上说, button对应于ui:FlatButton在没有tpl解析能力情况时退化了的结果. 在EJB3的规范中, 普通的POJO(Plain Old Java Object)对象在经过无害的标记(annotation)之后通过Enhance过程获得持久化等特性, POJO正对应于EJB Object的退化形式. 在某种意义上我们可以说, 存在着多少种可退化方式,就对应着多少种non-intrusive design。
      与传统设计中的结构堆砌不同, 现代技术更加强调在原有结构基础上的同态变化, 关注原有结构中的某些部分出现特殊意义后所产生的对称破缺. 在non-intrusive设计中, 基础的结构中没有为扩展内置什么特殊的结构, 一般仅仅是标记而已, 这些标记是无害的甚至本身在基础结构中是有用的, 例如某些javascript库在前台html页面中利用html标签的class属性作为标记. 为了识别这些属于结构标准部分的标记并对之进行处理,我们需要一种可选择的结构透明性, 具体来说我们需要能渗透到系统内部,准确的定位到标记处. 这就类似于x光检测, x光只与某些特殊材料发生强烈作用而普通部分对于x光而言是透明的. 而当外部引擎识别出这些特殊的标记之后, 可能需要操纵该局部结构, 例如在基础结构中插入一些新的结构以实现基础结构的增强. 这些都可能需要应用类似于AOP的技术, 而在这一增强过程中关于扩展结构的具体知识存在于扩展引擎中而不是基础结构中, 因而往往整体表现出一种IoC的特性.

 

分享到:
评论

相关推荐

    y系列三相异步电动机型号字母含义

    Y系列三相异步电动机是根据我国统一设计的最新系列标准制造的一类电动机,全称为“Y系列全封闭自扇风冷式鼠笼型交流异步电动机”。其防护等级达到IP44,即对固体物体的防护达到4级,对水的防护达到4级,能有效保护...

    行业分类-外包设计-具有透明防霉袋的鞋子包装组合体的介绍分析.rar

    首先,我们需要理解外包设计的核心含义。外包设计是指企业将产品设计工作委托给专业设计公司或独立设计师,以利用其专业技能和创新思维,提升产品的设计质量和市场竞争力。这种方式可以帮助企业节省内部资源,集中...

    单片机多生理参数监护仪的设计(终稿).doc

    无创血压测量技术从柯氏音法到示波法,再到动态血压监测,实现了连续、非侵入性的血压监测。脉搏血氧饱和度测量技术经历了光电容积描记法(PPG)的改进,现已成为临床常用的无创、快速检测方法。多生理信号监护仪...

    SSD4 exercise1

    为了提供更加纯净的下载环境,应当考虑减少或优化广告的展示方式,比如采用非侵入式的广告策略,或者提供无广告版本的软件供用户选择。 优化这些方面可以显著提升Thunder7的用户友好性,使其在竞争激烈的下载软件...

    后台各种操作提示GIF图标

    GIF图标作为非侵入式的提示手段,可以避免打断用户的操作流程,同时清楚地传达信息。例如,一个加载中的GIF图标可以表示“请稍候”,一个检查标记的GIF可以表示“成功”,一个错误符号的GIF则可以表示“出错”。 3....

    fastquery:FastQuery(快速数据库查询的方法)基于Java语言。他的使命是:简化Java操作数据层。做为一个开发者,只需只需要设计DAO接口即可,在项目初始化阶段采用ASM生成好实现类

    遵循非侵入式原则,设计优雅或简单,极易上手 在项目初始化阶段采用ASM生成好字节码,因此支持编译前预备,可替换减少运行期的错误,显着提升程序的强壮性 支持安全查询,防止SQL注入 支持与主流数据库连接池框架...

    气泡记单词 气泡提示 绿色小软件 英语 背单词

    这种非侵入式的提醒方式不会打断用户的其他工作,使得单词学习融入日常生活,更加轻松高效。 其次,软件还支持"MSN风格提示",这可能是指软件的界面设计与早期MSN即时通讯软件的提示窗口相似,提供了一种熟悉且友好...

    ARM7TDMI.pdf

    ARM7TDMI提供了ICE-RTX(In-Circuit Emulator-Real-Time eXtension)监控工具,这是一个实时监控工具,可以实现在目标系统上无侵入式的调试。 #### 内置乘法器 ARM7TDMI内置了硬件乘法器,这对于需要进行大量数学...

    python-emotiv用于在Linux上访问Emotiv EPOC EEG耳机的Python模块 - 副本 (2).zip

    Emotiv EPOC是一款非侵入式的消费级脑电图设备,用于捕捉和分析大脑的电信号,为研究者和开发者提供了探索人类大脑功能的新途径。 **1. Emotiv EPOC EEG耳机介绍** Emotiv EPOC是一款14通道的EEG耳机,能够实时记录...

    CCAforSSVEP-master_ssvep_SSVEPCCA_脑电_becomingbh6_ccaSSVEP_源码.zip

    在脑机接口(BMI,Brain-Computer Interface)领域,SSVEP被广泛应用于设计非侵入式的控制策略,因为它能提供快速且可靠的用户响应。 **脑电(EEG)** 是记录大脑电活动的技术,通过在头皮上放置电极来捕捉大脑的...

    微软一站式代码示例编码规范

    13. **交互操作**:在.NET与非托管代码交互时,遵循正确的互操作规则。 总之,遵循这些编码规范可以帮助开发者创建高质量、安全且易于维护的代码示例,这对于促进团队合作和提高整体项目的成功率至关重要。

    spring.doc.doc

    1. **非侵入式设计**:Spring 应用中的对象可以独立于Spring的API,这使得业务逻辑代码更加纯粹,减少了对框架的依赖。 2. **控制反转 (IOC)**:IOC 是Spring的重要概念,它将对象的创建权从代码转移到Spring容器...

    Onelooker:Windows窗体应用程序可以使用onelook搜索单词

    这可能意味着Onelooker的设计旨在提供一种非侵入式的搜索体验,让用户能够在使用其他应用程序的同时,轻松查找和学习新词汇。 标签“C#”表明Onelooker是用微软的C#编程语言编写的,这是一种面向对象的、类型安全的...

    防水等级划分及测试标准.pdf

    在现代电子产品设计与制造领域中,防水性能已成为衡量产品质量的关键指标之一。特别是在户外运动装备、汽车电子设备以及工业自动化设备等领域,良好的防水性能不仅能保障设备在恶劣环境下的正常使用,还能延长其使用...

    Wordpress Insense年度佳15

    这些产品可能经过精心设计,以适应各种类型的网站,如博客、电子商务平台、新闻门户等,旨在通过有效的广告策略来增加收益,同时也注重网站的加载速度、响应式设计以及对SEO的友好性。 【标签】"网页模版"说明了这...

    库卡系统软件-5.2、5.3、5.4-最终用户操作及编程指南

    库卡系统软件(KUKA System Software,简称KSS)是专为库卡机器人设计的一套操作系统,旨在为用户提供高效、直观的机器人编程与操作体验。该指南主要介绍了KSS 5.2、5.3、5.4三个版本的操作及编程方法,适用于最终...

    服务器后门程序

    然而,"后门"一词也带有负面含义,因为它可以被恶意黑客用来非法侵入系统,因此正确使用和保护后门至关重要。 服务器后门软件的主要功能包括: 1. 远程访问:后门程序提供了一种方法,使得管理员可以在任何地方...

    施耐德5防开关插座.pdf

    4. 安装和维护:5防开关插座设计有双挂锁孔,即便在户外或工业场合使用后忘记盖上保护门,也能通过自动锁定功能有效防止灰尘和水的侵入。此外,透明的塑料面盖提供了对内部元件和配置情况的直观检查,便于日常维护和...

    flasher:一种便携式 Unix 守护程序,它监视指定文件(例如,邮件文件或系统日志文件)的更改并通过闪烁键盘 LED 来指示写入次数。 当文件被读取时,闪烁停止

    其核心功能是关注指定文件的读写活动,通过键盘LED的闪烁来为用户提供非侵入式的提醒服务。这种设计对于那些需要实时关注系统活动,但又不想频繁查看终端或日志文件的用户来说非常有用。 标签“C”表明这个程序是用...

    黄河Flash播放器 V7.63 绿色版

    1. **Flash技术**:Flash是一种交互式矢量图形和多媒体平台,曾广泛应用于网页设计、动画制作、游戏开发等。其特点是文件小、播放流畅,但随着HTML5等技术的发展,逐渐被淘汰。 2. **SWF文件**:SWF是Flash Player...

Global site tag (gtag.js) - Google Analytics