问题标签 [plugin-architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Swing 应用程序作为服务器来托管 Web 服务
我有摇摆应用程序。基本上我使用了“floreant pos”并根据我的要求进行了定制。现在我想要在我的 Swing 应用程序中执行相同的操作,但以 Rest Web 服务的形式。
- 当我启动我的 Swing 应用程序时,必须有可从移动应用程序访问的 Web 服务。
- 我需要对 Web 服务使用相同的预定义方法。
- 简单地说,它是作为服务器的应用程序。
以上是要求,不知道如何实现。此外,我需要他们在 1.4 版本中发布的“floreant pos”插件架构的一些细节,所以任何人都可以帮助理解“floreant pos”的插件架构。
网站:- http://floreant.org/ 维基:- http://wiki.floreantpos.org/
我被困了很长时间。请给我一些解决方案。
提前致谢
c++ - 插件架构中的 Qt 信号槽
我正在尝试创建一个具有菜单按钮的应用程序。单击按钮后,将出现一个表单。表单是使用插件创建的。问题是 - 第一次单击时,会正常生成一个表单。但是在第二次单击时,会生成另外 2 个表单而不是一个。第 3 次点击提供 3 个更多的表格,依此类推。每次点击我只需要一个表格。
这是我的应用程序 Mainwindow.cpp
java - 应用程序服务器可以部署/取消部署具有相同类加载器的应用程序吗?
先决条件: 这个问题与某些特定的应用程序服务器无关。唯一的条件集是关于 Java 应用程序服务器(Tomcat、JBoss、WebSphere 等)
问题: 我想在应用服务器上部署应用程序,具有一个特性:我想为它介绍插件架构。例如,我想以我们在 Tomcat 中的常用方式部署我的 MAIN 应用程序,但随后我希望能够使用标准应用程序服务器功能向该应用程序动态添加 MODULES。在此操作之后,主应用程序应该能够从 MODULE 寻址类,例如它应该能够通过类名实例化类,从 MODULE jar 读取配置等。
某些应用程序服务器可以吗?
inversion-of-control - 在 ASP.NET Core 中,IoC ASP 启动类是否解决了托管可扩展性框架通过目录和容器解决的问题?
我读过这个,MEF (Managed Extensibility Framework) vs IoC/DI,但它已经过时了。从那时起,MEF 被添加到 Core。
当我查看 ASP.NET Core 中的 MEF 和 IoC 时,我无法分辨出插件架构的很多差异。两者都“连接”依赖项。如果我想使用 IoC(内置 IoC)在核心应用程序中创建插件,为什么不直接更改我的 ConfigureService 方法呢?这和在MEF中装饰进出口一样吗?在 2017 年(足够接近),这里的构图有何不同?
android - 如何在不重新安装应用程序的情况下在 android 中下载和添加 XML 布局和 Java 代码文件?
我想通过在用户选择下载屏幕时在应用程序中添加几个屏幕而不让用户重新安装或升级应用程序来扩展我的 android 应用程序的功能。我已经探索了让用户安装另一个将充当插件的 android 应用程序的选项,但我想避免强迫用户通过 google play 安装另一个应用程序,因为他可能不情愿。
有没有办法只下载所需的 XML 布局和附加的 java 代码文件?
asp.net-mvc - 为什么 Orchard 没有模型视图控制器?
我在果园工作。写这样一个项目是我的梦想!..所以我开始了一项研究。我对 orchard 感兴趣的是,虽然 orchard 是 mvc 项目,但为什么它在他的 web 层解决方案中没有任何模型、视图和控制器?它使用 或像这样CleanArchitecture
的一些特定架构吗?
我试图在果园文件中了解这个案例,但我没有找到任何关于它的描述。
angular - 使用 Typescript 使用 Webpack 动态加载模块
我正在尝试构建一个支持插件的网络应用程序,环境是 Angular 2(到目前为止)、Typescript 2.1 和 Webpack 2。我有一些扩展点(插槽),插件可以在其中绘制它们的内容:基本上我有一个组件它能够托管在运行时已知的一些其他组件(有关该想法,请参见“掌握 Angular 2 组件”第 10 章,以及关于如何在运行时编译和“绘制”Angular 组件的SO + plunker )
这是我想要实现的目标:
我在运行时使用System.import
Webpack 导入模块,虽然我知道它已被弃用,但 AFAIK 它是使用 typescript 动态导入模块的唯一方法,因为import
typescript 本身还不支持(参考此处)。(有没有其他方法可以做到这一点?)
现在,只是为了测试系统,我使用下面的目录树将插件目录包含在应用程序的同一根目录(src 目录)中;注意这会导致 webpack 在编译时知道插件代码的存在,并将插件和应用程序打包在同一个包的集合中,这是为了测试插件架构能力的一个简化;这是文件夹树:
这样,如果我导入pluginA.plugin.ts
一切
System.import('relativePathToPluginA')
都按预期工作:系统能够加载和编译插件组件并使用它。
但是,在现实世界的场景中,插件在编译时一定是未知的,所以我使用 angular-cli 创建了一个新项目,并添加了 pluginA 目录,然后我在其 app.module 中引用了它。然后我构建了项目并将 js 输出移动到一个文件夹中,比如说D:\pluginDist\
. 然后我main.bundle.js
从上面的 loadPlugin 方法中引用了 ,如下例所示(使用 url = 'main.bundle.js')
我不知道引用主边界是否正确(我肯定缺少一些 webpack 的概念)但它至少是构建工件,所以我试一试。这样我就有错误
Unhandled Promise rejection: Cannot find module 'D:\pluginDist\main.bundle.js'. ; Zone: angular ; Task: Promise.then ; Value:
我做的其他测试是
编译插件项目中的*.ts文件,完全跳过webpack,所以只需
tsc
在命令行中输入,并尝试导入pluginA.plugin.ts
编译结果,我遇到了和上面一样的错误。将 js 结果(来自 webpack 或来自普通 tsc 转换)放在开发 Web 服务器实际提供文件(.tmp)的文件夹中,然后通过相对路径引用它们:这会导致 webpack 在编译时停止,因为当然,它在打包时没有找到项目目录树中的文件。
现在不知道去哪里了,有什么建议吗??
我想要实现的是使用 webpack 和 typescript 动态加载,这是一个在编译时未知的 js 模块。
angularjs - 如何为高度解耦、即插即用的复杂组件构建 Redux?
我对 Redux 很陌生,想在我的应用程序中使用它,但我被困在 Redux 部分的架构/设计阶段。以下是我对设计的要求和假设。
应用程序详细信息: 带有 AngularJS 的 SPA。其他库使用ng-redux、reselect、rxjs。
组件详细信息: 可重用的网格组件以呈现大量数据。
我的想法: 创建一种即插即用的基于组件的架构,其中网格的所有内部组件都独立于父/组合组件,如搜索、排序、行、标题、单元格。
所有组件都将拥有自己的一组 reducer、action、selector 和 store 中的 state slice。
因为所有组件都有自己的reducer,并且可以按需插入,所以我需要它们懒惰地注册到store,而不是在一个地方堆积。
一些组件,如搜索、排序以及拥有自己的状态,也会影响其他组件的状态。例如:设置查询参数(searchText、sortOrder 等)以获取将由另一个组件处理的网格数据。
我的想法:
对于第一点,我正在研究重新选择以提供相关的状态切片。
对于第二点,我仍然对使用combineReducers / replaceReducer进行延迟注册感到困惑。如果我想访问该州的多个部分,我觉得combineReducers不适合。
对于第三点,我正在考虑以下方法:
一个。在需要更新状态的多个部分的地方通过getState()传递整个状态。虽然这种方法让我感觉 Redux 使用不当。
湾。组件A触发其自己的操作来更新其状态部分,然后为另一个组件B触发另一个操作以更新其状态片。这种方法也感觉像打破了 Redux 的整个想法,虽然我不知道如何使用它,但可以在这里使用副作用的概念,也许是redux-saga,redux-thunk等。
注意:使用任何一种方法都不应该导致组件知道其他组件,因此任何必须做的事情都将通过传递一个通用的配置对象来完成,例如{ actionsToFire: ['UPDATE_B'] }
.
在应用程序的页面之间来回导航时我需要状态管理,但我不需要从服务器端热重载、动作重播或预取应用程序状态。
组件也将负责在不再需要时销毁其状态。并且状态将具有规范化的结构。
我知道这些要求可能看起来很奇怪或不常见,但我会保持这种状态。
我已经知道的几件事是:
我不需要像 Dan 的经典文章所说的那样使用 Redux,但我认为在这种情况下我需要它。
我知道 Smart 和 Dumb 组件,主要是我的组件可能看起来很聪明(即知道应用程序状态),但这就是我想要保留它们的方式,我可能错了。
网格组件示意图:
dependency-injection - 使用 Simple Injector 构建基于插件的应用程序
我的任务是编写一个技术规范(然后实施)一个将建立在几个子模块上的系统。子模块将部分并行开发,所以我真的很想避免每次添加或更新插件时重新启动整个系统。由于我已经在另一个项目中使用过 Simple Injector,因此我计划在每个子模块中将其用于 IoC。我的计划不是在将模块绑定在一起的核心中引入 MEF(托管扩展框架)或 MAF(托管插件框架),而是看看 Simple Injector 是否也可以用于处理模块。
我的计划是使用 FileSystemWatcher 来监视插件目录,当检测到更改时,要么让 Simple Injector 做这件事,要么可能推出我自己的解决方案。我已经阅读了这里的讨论,但我相信我的用例是不同的。
要求:
- 核心系统作为 Windows 服务运行,应避免一直重启
- 每个模块负责在内部编排需要完成的工作(可能很多,因此不需要重新启动所有内容)
- 整个系统是基于事件的。模块将向事件总线发出事件,以便其他模块可以根据事件做出反应(做这件事)。然而,模块也将被允许定期做一些事情。Fx 一个模块监听目录中的新文件,解析文件并将数据放入数据库。其他模块可能需要根据这些新数据做一些事情。另一个模块进行一些定期计算。
- 所有模块都将共享一个通用接口 IModule,该接口将使核心系统能够启动和停止(处置)模块,如果我找不到其他方法,也许还有注册事件总线的方法
- 在系统重新启动(fx 服务器重新启动)时,核心当然应该能够获取所有现有模块
为了能够动态加载/重新加载程序集,我计划在单独的 AppDomain 中运行每个模块。
这可以使用简单注射器吗?还有其他想法吗?也许是我没有想到的。
java - 如何控制 Spring 上下文初始化错误
假设我们有一个 Spring bean:
的实现PluginInterface
与核心系统具有运行时依赖关系,并由外部提供。有时,它们中的一些可能是错误的(例如,它们的依赖关系丢失)。如果在 Spring 上下文初始化时出现这样的错误 - 整个应用程序不会启动(即使损坏的插件也不需要正常运行)。
是否可以控制 Spring 上下文加载,如果其中一个PluginInterface
实现发生错误,则跳过它并继续初始化?
更新:更多解释:我不需要有条件地添加 bean。我想跳过一个错误的 bean,并且在上下文初始化期间出现问题。这是一个插件 - 在运行时提供。
更多解释:即使插件引入的 PluginInterface 实现之一无法初始化,我也想启动应用程序。