Добрый день!
Дано:
есть некий конфиг json (описательный шаблон):
[
{
"name" : "method1", //выходные аргументы method1 являются входными аргументами method2
"inArgs" : "[inArg1, inArg2, inArg3]",
"returnArgs" : "[outArg1, outArg2, outArg3]"
},
{
"name" : "method2",
"inArgs" : "[inArg1, outArg2, outArg3]",
"returnArgs" : "[outArg4, outArg5, outArg6]"
},
.....
{
"name" : "method30", //выходные аргументы method30 являются входными аргументами method40, коллизия
"inArgs" : "[inArg4, outArg70, outArg80]",
"returnArgs" : "[outArg40, outArg50, outArg60]"
},
....
{
"name" : "method40", //выходные аргументы method40 являются входными аргументами method30, коллизия
"inArgs" : "[inArg5, outArg40, outArg50]",
"returnArgs" : "[outArg40, outArg70, outArg80]"
},
]
Далее этот json парсится и создается string c методами и подставленными значениями аргументов из конфига и контекста из:
...
[ctx.outArg1, ctx.outArg2, ctx.outArg3] = method1(ctx.inArg1, ctx.inArg2, ctx.inArg3);
[ctx.outArg4, ctx.outArg5, ctx.outArg6] = method2(ctx.inArg1, ctx.outArg2, ctx.outArg3);
...
Далее это все запускается в контексте объекта, в котором есть значения аргументов и заранее описаны все вышеуказанные методы и их логика.:
{
inArg1: 1,
inArg2: 2,
inArg3: 3,
outArg1: null,
outArg2: null,
outArg3: null
}
и значения в этом объекте обновляются.
Постарался полностью описать механику процесса.
Т.к. выходные аргументы одного метода могут являться входными аргументами другого метода (так же через цепочку методов неопределенной вложенности), необходимо вылавливать такие коллизии, желательно на этапе парсинга конфига.
Может кто-нибудь посоветовать оптимальное решение такой задачи, пока в голову приходят только графы.