在设计软件平台时,构成成功可插拔架构的关键要素是什么?

时间:2009-05-19 01:34:11

标签: architecture plugins collaboration

越来越多的软件平台让外部开发人员通过可插拔架构(插件/扩展)贡献代码,给我留下了非常深刻的印象。

我一直在研究哪些平台拥有最好的插件社区......

优秀的插件架构,拥有蓬勃发展的插件社区:

然后有一些活动插件社区不太活跃的平台:

(为了集中注意力,让我们放下或忽略支持成熟软件应用程序的平台,如Microsoft Windows,iPhone和Facebook。)

你会说一个软件平台是一个成功的插件架构,有很多插件,而另一个平台有一个较小或不活跃的开发者社区?

只是为了开始,这是一个部分列表:

  • 该平台做了一些广泛有用的事情:让人们浏览网页,买卖东西,发布博客和留言板等。
  • 该平台是开源的(或至少可以免费获得源代码)。
  • 平台中的所有重要功能都可通过挂钩和过滤器完全插入。
  • 所有或大多数可插入函数都有详细记录(或者有一个wiki,因此开发人员可以为您记录)。
  • 有一个论坛或电子邮件列表,供开发人员共享插件,分享提示和技巧
  • 有一个论坛或电子邮件列表,不太复杂的用户可以获得安装和配置插件的帮助。

平台开发人员可以做些什么来创建可插入的体系结构,鼓励许多外部开发人员创建插件?

4 个答案:

答案 0 :(得分:1)

就个人而言,我是否学会(并且确实)为任何特定系统编写应用程序有3个主要贡献者:

系统是否非常有用,以至于我想足够使用它来激励它扩展它?

系统是使用我熟悉的语言,还是易于学习而不是某些模糊或专有或其他过于复杂的解决方案(参见elisp)?

插件系统是否以清晰的语言记录得非常好,以便我可以开始编写插件而不花费数小时(或几天)来破译系统?

如果这些都是真的,那么你不想为平台开发的唯一原因是其他人已经为你的所有想法编写了插件。 :)

我认为拥有一个集中且众所周知的存储库来容纳用户提供的插件(根据您的示例项目)也非常有用/重要。我讨厌不得不在网上搜索个人的,可能是低质量的,甚至可能是恶意的附件,我正在尝试做的事情。这应该是一个网站或维基,因为即使是论坛或邮件列表档案也可能令人烦恼且费时费力。

答案 1 :(得分:1)

你错过了这一点。

JVM是一种可插拔的架构。每个类文件都会插入并扩展它。

Apache是​​多个级别的可插拔架构。有“mods”。一些mod运行其他解释器,这些解释器本身是可插拔的架构。 PHP,mod_wsgi / Python等都插入了Apache。

Python是一个可插入的体系结构,其中插入了Python .pyc文件和目标文件(.DLL,.SO)。

每个语言框架实际上都是一个可插拔的架构。

答案 2 :(得分:1)

平台是基金会

软件平台的一个视图是其他软件依赖于执行其他任务的基础。这可能是一个简单而明显的陈述,但它是一个重要的陈述。

基础知识应该很容易

平台必须有一个目的,平台开发人员在设计API时应该意识到这一点,以便明确主要用例是什么,并且围绕它们的API应该尽可能地直接用于方式它们的设计也与其周围的文档有关。

扩展点应该明显

平台的可扩展性是为开发人员提供扩展或更改平台的机会。如果这是您想要鼓励的内容,那么您需要非常清楚这种可扩展性的性质和局限性,并提供一组明确定义的接口来实现这一点。

这听起来可能很明显,但是如果你想让一个社区围绕一个平台进行开发,那么该平台必须有用,并且扩展它应该是一种简单的体验。

对不起,如果这接缝有点“建筑天文学”,我认为我提出了一些有效的观点,我可能会让它们变得很糟糕,随意指出它或添加它们

答案 3 :(得分:0)

不要忘记Eclipse(使用>1000 registered 3rd party "plugins"(实际上它们是由Eclipse术语中更小的插件组成))。它的成功部分可能来自于如何设计一个也可由其他人扩展的插件的良好经验法则。还有一个严格的API版本控制策略(当然也有它的缺点)。