This topic created in 2535 days ago, the information mentioned may be changed or developed.
有一种已经定义好格式的数据类型需要处理,但是多租户架构,每个客户的处理方式是不统一的。
比方说,要处理的都是数字,变量只有两个 x, y,但是甲客户是要处理 x + y,乙客户需要处理的是 x / y,这样来一个客户我就要写一个处理方法,然后重新发布我真的烦透了。我不想用规则引擎,因为我需要客户的处理逻辑和原来的代码一起合并然后线下 debug,这个是必须的。
所以有没有办法,能够把客户的代码插入到原来代码的办法,然后能打印出新的代码,还能把新的代码编译运行得到结果
谢谢各位
19 replies • 2019-07-05 19:39:02 +08:00
 |
|
1
www5070504 Jul 4, 2019
a = __import__("模块名") a.xx 这种行不
或者用 eval eval 不太安全
|
 |
|
4
pmispig Jul 4, 2019
先写到文件,再动态 import ?
|
 |
|
5
no1xsyzy Jul 4, 2019
AST 现场修改代码 PyMacro 似乎就是这么干的
|
 |
|
6
oatw Jul 4, 2019
元编程? Ruby 是可以实现的,Python 不清楚。 不过 Python 不也是动态语言吗?有编译时?!还是只有运行时?
|
 |
|
8
xiaket Jul 4, 2019
动态代码加载如果还觉得不够的话, 可能只能和楼上说的一样, 用元编程定义一个 DSL 了. 如果不想搞那么复杂, 搞一个中间文件格式出来, 所有客户的输入都统一转成这个格式, 然后再统一处理也行
|
 |
|
10
misaka19000 Jul 4, 2019
每当这种场景我就推荐用 golang 写基础逻辑,然后用 lua 写脚本来处理新的逻辑 hhh
|
 |
|
11
BBCCBB Jul 4, 2019
动态 import, 你客户的处理代码加唯一标识,import 的时候按照你这个唯一标识的规则 import 进去执行。
|
 |
|
12
BBCCBB Jul 4, 2019
lua 这种可以为每个函数单独设置 environment 的安全些。
|
 |
|
13
anonymous256 Jul 4, 2019 via Android
采用框架-组件(插件)的架构,你的核心代码是框架,每个客户的代码是组件。不必重新发布,只更新组件就可以了。
|
 |
|
15
Takamine Jul 5, 2019
干脆自己写一个编译器 2333333333333333333333333333333333333333。
|