跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 想要开发一个带插件机制的后端,请问现在哪种编程框架适合呢?
未分類
8 7 月 2020

想要开发一个带插件机制的后端,请问现在哪种编程框架适合呢?

想要开发一个带插件机制的后端,请问现在哪种编程框架适合呢?

資深大佬 : JarvisTang 7

先谢谢各位了。

情况是这样的,我想要开发一个通用型产品的后端(不从零开始,所以基于开源框架开发),实现类似 WordPress 插件机制的功能,让第三方开发者可以在不修改主程序的情况下,扩展更多功能。后端平台的插件机制,可以有自己的页面和 API 接口(面向客户端)。

因为我熟悉 PHP 语言,所以研究了 PHP 的各个框架,比如 Laravel 框架。

但是由于现在的 PHP 编程框架都是依赖 Composer 安装的,不好注入加载项,所以实现插件机制,逻辑有点走不通。

想向社区里各位请教一下,PHP 的框架能不能行得通?

或者其他语言是否有适合的 Web 框架(方便做插件机制)。

再次感谢

大佬有話說 (15)

  • 資深大佬 : LongMaoz

    路由加载?

  • 資深大佬 : qiayue

    fastadmin ?

  • 主 資深大佬 : JarvisTang

    @qiayue 有点意思,就这个思路,但是我面向的不是开发者,是使用者。
    使用者安装我的产品之后,可以在后台应用中心(插件市场)选择插件安装(免费或收费),然后安装后就能配置使用了。使用者可能是不懂技术的人,所以面向的不是开发者。

  • 主 資深大佬 : JarvisTang

    @qiayue 所以插件面向的不是开发者,使用者安装即用,不用开发。就像 WordPress 插件。

  • 資深大佬 : HiCode

    插件机制的本质是什么?

    系统制定插件加载、执行规则,提供钩子列表;

    插件按系统指定规则开发代码,拦截钩子。

    PHP 、Node 、Python 等等都能满足你的需求,哪怕 C++也可以通过 dll 载入实现插件机制,实现应用安装功能。

    你只是没搞清楚思路。你可以先找一下 wordpress 的插件机制去深入了解,然后开发一个插件看看,搞清楚流程了就明白要怎么开发。

  • 資深大佬 : BaiXiaoSheng

    如果是做插件的话,而且又是需要热加载的话,Java 还是可以考虑的,缘由是 Java 是动态语言,我得考虑是编译型语言比较难做到不重新启动就能加载,如果不是热加载的话仅仅是实现插件机制,PHP 应该也是可以的。

  • 資深大佬 : ljpCN

    @BaiXiaoSheng Java 是动态语言?

  • 資深大佬 : anaf

    我把 WordPress 的 addons 的插件机制复制到了 TP 上。 就是复制几个类 不难的

  • 資深大佬 : luckyrayyy

    Java 有个 OSGI,但是没详细了解过不知道是不是符合要求。

  • 資深大佬 : imdong

    本菜菜对插件机制的一些理解,不知道对不对,希望没给主指错路,也希望大家知道批评:

    PHP 面向 Composer 开发不影响自己实现插件机制,我们可以再额外注册一个 autoload 到 __autoload() 队列中。

    https://www.php.net/manual/zh/function.spl-autoload-register.php

    假设我们使用了像 Laravel 这样的框架开发程序系统,在插件安装后由于不能更改原有程序代码,所以要用到的是“回调”这样的实现。

    当 某某事件 发生时,调用插件的 某某方法,传递必要的(统一的)参数。

    然后我们只需要规范好插件安装在什么地方,我如何加载你,我有那些事件,触发时会给你什么。

    比如我会规范:插件统一在 /Ext/ 目录(命名空间)下,以自身插件名为二级命名空间。

    大致规范就是 Ext/{开发者}/{插件名};

    然后我会公开一个事件列表,事件源::事件名(可以提供的参数)

    Page::onLoadPre($page_type = ‘index’, $data)
    AdminPanel::addMenu($position = ‘post’, $menu)

    然后插件安装的时候,注册一次自己的所有事件到对应的回调。

    当你的代码执行到某个地方的时候,触发钩子,遍历已经注册的回调。

    或者某些只需要执行一次,比如刚才的 AddMenu 就在安装的时候执行一次就好了。

  • 資深大佬 : nl101531

    没太理解你的难点,我认为插件的难处在于动态加载以及释放这部分,解释性语言天然支持啊。编译类型才麻烦,比如 Java 可能就需要自定义类加载器,卸载还需要想办法 gc 释放掉。

  • 資深大佬 : wildlife

    web 应用的话,我觉得 PHP 等动态脚本语言是最容易实现插件机制的,zblogphp 应该是一个简单又典型的插件实践案例,可以参考一下

  • 資深大佬 : no1xsyzy

    参考下 nextcloud ?
    所有插件放在一个文件夹下。

  • 資深大佬 : wildlife

    “`php
    foreach ($GLOBALS[‘hooks’][‘Filter_Plugin_ViewIndex_Begin’] as $fpname => &$fpsignal) {
    $fpreturn = $fpname($url);
    if ($fpsignal == PLUGIN_EXITSIGNAL_RETURN) {
    $fpsignal = PLUGIN_EXITSIGNAL_NONE;

    return $fpreturn;
    }
    }
    “`

  • 資深大佬 : BaiXiaoSheng

    @ljpCN 虚拟机语言啊,可以运行时加载 class 文件或者 jar 包

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具