插件背后的基本理念是什么?

Ara*_*raK 6 plugins

你把它称为插件,插件以后与原始软件连接的代码,这真的没关系.我很想了解它们是如何工作的,必须对如何设计插件系统进行简单的解释.不幸的是,我从来没有理解过,在我的脑海里仍然存在许多悬而未决的问题.例如,程序如何找到插件?它是如何与它接口的?什么时候软件最好有插件系统?


感谢所有有用的答案.看来我问过于开放的问题,幸运的是我找到了关键词.我喜欢David回答虽然我不是Java人,但他的谈话对我有意义:)

Mit*_*eat 7

  1. 创建interface一个特定类型的所有插件将实现
  2. 编写仅对接口"使用"插件的代码.
  3. 有一种动态方式来加载包含实现您的接口的插件类型的DLL(例如,有一个可配置的文件夹位置来测试该文件夹中的任何DLL是否包含实现您的接口的任何类型,并动态加载任何实现您的接口的类型.这可能会使用NET Assembly.LoadFile())

如果你想看看一些源代码,Paint.NET是免费的开源软件,并且有一个插件架构.


Dav*_*lle 6

插件通过符合主应用程序期望使用的众所周知的接口来工作.

插件架构实际上有多种工作方式,但一般来说,这些步骤如下:

  1. 插件旨在匹配应用程序所需的接口.例如,一个简单的应用程序可能要求插件实现IPlugin接口.
  2. 应用程序会加载插件,通常是在应用程序启动时
  3. 插件通常可以访问应用程序管理的大部分数据.例如,Firefox插件可以访问当前的网页,Eclipse插件可以访问打开的文件.

以下是应用程序可以找到插件的两种方式(多种方式):

  1. 已知插件存在于特定文件夹中,并且应用程序知道从该文件夹加载插件
  2. 每个插件作为服务运行,服务设计为一起工作(这是基于OSGi的应用程序的工作方式)

当找到插件时,它们由应用程序加载(有时是类加载器的工作).

当软件架构师期望软件提供商或用户社区将实现原本不属于系统的新功能时,软件架构师可能会设计插件架构.两个很好的例子是Eclipse和Firefox; 其他应用程序包括Adobe Photoshop(用于艺术技术和图形工具)和Winamp(用于可视化).