【发布时间】:2013-08-26 01:50:59
【问题描述】:
我误解了“可扩展”和“可插入”这两个术语。谁能帮我解释一下?
【问题讨论】:
-
这些术语有点滑。它们都密切相关,但它们往往意味着执行相同任务的方式略有不同。任务是在构建后为其添加行为。扩展和插件采用两种不同的方法。有关定义方法差异的最佳尝试,请参阅下面的答案。
标签: oop design-patterns architecture system
我误解了“可扩展”和“可插入”这两个术语。谁能帮我解释一下?
【问题讨论】:
标签: oop design-patterns architecture system
从实际编码器来看:
可扩展 - 获取一些代码类并使用它作为基础在此类之上构建。密封类不能通过继承进行扩展。但是,只要原始类中的代码是可重用的,就可以通过其他方式实现可扩展性。
可插拔 - 也可以是可扩展的。使事物可插入的原因是能够将某些东西(dll)放到某处并让该东西正常工作。它是通过您的可插拔项目遵守某些规则(实现接口)来实现的。
看你怎么看,定义不同。例如,您的插件可以扩展应用程序。但是从编码的角度来看,可扩展性实际上就是以这样一种方式构建某些东西,以便您以后可以使用它并从中制作出其他东西。可插拔性是一种设计,您不知道自己的组件是什么,但无论它们是什么,您都知道它们将如何工作。
【讨论】:
可扩展意味着你可以配置一个模块(或框架组件)最终做你想做的事。
Pluggable 意味着您可以移除模块,或许可以替换为您自己的模块。该模块将完全在您的控制之下,并且最终应该做您想做的事情。
一个很好的例子:
魔兽地图是可扩展的。您可以创建新地图,但不能 真正去除水砖,你只是避免使用它们。同样,您不能 重新定义元素必须适合文件的位置,也许是为了节省空间。
网络插件是可插拔的。你可以创建一个新的网络插件,但是你 不需要从另一个插件复制任何代码,也不需要 遵循任何内部格式。您确实需要关注插件 interface 这将是应用程序之间唯一的通信线路 和你的插件。两个流行的网络插件是 Adobe Acrobat PDF 阅读器和 Java 小程序运行器。
在某种程度上,这些是概念性项目。可以将插件视为扩展点,从而使所有插件扩展和插件系统可扩展;然而,在编程术语中,可扩展接口往往不如插件接口灵活。
同样,您可能会考虑将扩展点配置为“插入”应用程序;但是,与插件不同的是,扩展通常不能在应用程序之外使用,它是“扩展”。
【讨论】: