python - 封装我的后端应用程序的动态更改和添加的部分
问题描述
你好 Stack Overflow 社区!
设想:
我的应用程序是一个完全基于 NodeJS 的客户管理平台。它充当集成来自不同系统的数据的中间件。
客户可以激活和停用一些“服务”。此应用程序将控制他们有权在请求时执行此类操作。
对这些服务进行更改将执行一个脚本,该脚本将联系外部系统以查询和更新信息,无论成功与否,最终都会返回信息。通常这些脚本很简单。
直到这里一切都很酷。我们可以简单地将每个服务的服务脚本集成到主应用程序中,仅此而已,对吗?
我还没有说的是:将会有大量不同的服务(最终我们可能会有数百个),并且它们会经常更改,例如,如果推出促销活动。
挑战:
我们不能仅仅为了推出新服务而发布新版本的客户管理应用程序;几乎没有封装,所以事情可能会破裂;这些新脚本的性能可能会影响主应用程序;需要重新启动主应用程序以应用更改等。
我希望能够以“即插即用”的方式随时创建和修改大量这些服务,将其集成到主应用程序中并不是一个非常漂亮的解决方案。
问题:
除了主应用程序之外,您将如何封装这些可以随时动态更改的脚本?
我正在考虑将这些服务编程为 Python 脚本,在需要时从主应用程序调用。Python 简单且多平台,可单独运行。这是一个好方法吗?请不要犹豫,告诉我这个想法是多么可怕,如果它有任何机会的话!
解决方案
好吧,已经很久没有答案了,所以我给出我的结论:
在与两位后端编程工程师交谈后,他们批准了我的解决方案,即为require
每个“附加”部分(代码中称为“组件”)加载(使用)JavaScript 文件,然后执行它,最后刷新缓存。
该解决方案允许在不重新启动程序的情况下随时随地编辑文件,并在需要时允许将所有内容保持在一个文件中。
// Component script load part:
let componentScriptPath = '../custom_component_scripts/' + component_id;
let componentScript;
try {
componentScript = require(componentScriptPath);
} catch(error) {
console.error('critical', 'Failed to read or find scripts for component "' + component_id + '". Error: ' + error);
delete require.cache[require.resolve(componentScriptPath)];
console.log('Flushed script cache for "' + component_id + '"');
throw error;
}
// Component script execution part:
try {
await componentScript.actions[operation](subscription_id, parameters)
console.log('Component script for "' + component_id + '" reported success');
} catch(error) {
console.error('Component script for "' + component_id + '" reported failure');
throw error;
} finally {
delete require.cache[require.resolve(componentScriptPath)];
console.log('Flushed script cache for "' + component_id + '"');
}
推荐阅读
- c# - 在表达式树中使用隐式转换运算符
- vue.js - Testcafe 不适用于 Nuxt/Vue Amplify/Cognito 调用。RangeError:超出最大调用堆栈大小
- powershell - 使用 PowerShell splatting 对属性进行排序
- swiftui - SwiftUI:文本字段被切断
- docker - Spark 执行器将结果发送到随机端口,尽管所有端口都已显式设置
- javascript - 如何使用Joi验证其键应与外部对象匹配的另一个键的值是数组的嵌套对象?
- sql-server - 具有参数的视图的内联用户定义函数
- kivy - 当我在 `FileBox` 对象上`click` 时,如何制作具有两个或多个选项的菜单?
- r - 如何根据闪亮的复选框输入将多个 dySeries 发送到辅助轴?
- sql - 从 BigQuery 表中的数组中获取前 N 个元素