热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

构建可扩展的插件系统:关键步骤与最佳实践

构建一个可扩展的插件系统是软件开发中的重要任务。本文将探讨实现这一目标的关键步骤和最佳实践,包括模块化设计、接口标准化、动态加载机制以及安全性考量,旨在帮助开发者打造高效、灵活且安全的插件架构。

这不是一个 答案 ,而是一堆可能有用的评论/示例。


  • 使您的应用程序可扩展的一种有效方法是将其内部作为脚本语言公开,并用该语言编写所有顶级内容。这使得它非常可修改并且实际上是面向未来的(如果您的原语选择和实施得当)。这类事情的一个成功案例是 Emacs。我更喜欢 eclipse 风格的插件系统,因为如果我想扩展功能,我不必学习 API 并编写/编译单独的插件。我可以在当前缓冲区本身中编写一个 3 行代码段,对其进行评估并使用它。非常流畅的学习曲线和非常令人满意的结果。


  • 我稍微扩展的一个应用程序是Trac。它有一个组件架构,在这种情况下意味着任务被委派给宣传扩展点的模块。然后,您可以实现适合这些点的其他组件并更改流程。这有点像上面 Kalkie 的建议。


  • 另一个很好的是py.test。它遵循“最好的 API 就是没有 API”的理念,并且完全依赖于在每个级别调用的钩子。您可以在根据约定命名的文件/函数中覆盖这些钩子并更改行为。您可以在网站上查看插件列表,了解它们的实施速度/容易程度。


一般几点。


  • 尽量保持您的不可扩展/非用户可修改的核心尽可能小。将您所能做的一切委托给更高的层,以增加可扩展性。在出现错误选择的情况下,需要在核心中纠正的东西更少。

  • 与上述观点相关的是,你不应该在一开始就对项目的方向做出太多决定。实现所需的最小子集,然后开始编写插件。

  • 如果您要嵌入一种脚本语言,请确保它是一种完整的语言,您可以在其中编写通用程序,而不是 用于您的应用程序的玩具语言。

  • 尽可能减少样板。不要为子类化、复杂的 API、插件注册和类似的东西而烦恼。尽量保持简单,使其 易于 扩展,而不仅仅是 可以 扩展。这将使您的插件 API 得到更多使用,并鼓励最终用户编写插件。不仅仅是插件开发人员。py.test 做得很好。据我所知,eclipse没有。





推荐阅读
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • Barbican 是 OpenStack 社区的核心项目之一,旨在为各种环境下的云服务提供全面的密钥管理解决方案。 ... [详细]
  • 本文详细介绍如何在MyEclipse开发环境中安装并配置Jad反编译插件,包括必要的文件下载及配置步骤。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • 深入解析AUTOSAR方法论:汽车电子系统开发的理论基础(第三部分)
    本文详细探讨了AUTOSAR方法论在汽车电子软件系统开发中的应用,涵盖了从系统配置到生成可执行代码的各个关键步骤。通过介绍各阶段的任务和工具支持,帮助读者全面理解AUTOSAR的设计流程。 ... [详细]
  • 对于许多初学者而言,遇到总线错误(bus error)或段错误(segmentation fault/core dump)是极其令人困扰的。本文详细探讨了这两种错误的成因、表现形式及解决方法,并提供了实用的调试技巧。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 本文介绍了如何使用Gradle和gdx-setup.jar工具来创建LibGDX项目,包括详细的步骤和注意事项,适合初学者和有经验的开发者。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 如何在Linux环境中高效地创建、编译与运行C语言代码
    本文面向第一次在linux尝试写C语言程序的新人。有经验的请绕行。C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入 ... [详细]
  • https:www.hollischuang.comarchives74 对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
author-avatar
雅丽猫儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有