Инкапсулируйте части моего внутреннего приложения, которые динамически изменяются и добавляются - PullRequest
0 голосов
/ 18 июня 2020

Привет, сообщество переполнения стека!

Сценарий:

Мое приложение представляет собой платформу управления клиентами, полностью основанную на NodeJS. Он действует как промежуточное программное обеспечение , которое объединяет данные из разных систем .

У клиентов могут быть активированы и деактивированы некоторые «услуги». Это приложение будет контролировать, что они имеют право выполнять такие операции по запросу.

Внесение изменений в эти службы выполнит сценарий, который свяжется с внешними системами для запроса и обновления информации , который в конечном итоге вернет информацию, удалось это или нет. Обычно эти скрипты простые.

Пока здесь все круто. Мы могли бы просто интегрировать сценарии службы для каждой службы в основное приложение, и все, правильно?

Я еще не сказал: будет большое количество различных служб (потенциально у нас могут быть сотни), и они будут часто меняться , например, если будет запущена акция.

Задача:

Мы можем ' t выпускать новую версию приложения для управления клиентами только для запуска новой услуги; там мало инкапсуляции, поэтому все может сломаться; производительность этих новых сценариев может повлиять на основное приложение; необходимо перезапустить основное приложение, чтобы применить изменения и т. д. c.

Я хочу иметь возможность создавать и изменять большое количество этих сервисов в любое время в режиме «Plug & Play» , интегрировать это в основное приложение - не очень хорошее решение.

Вопрос:

Как бы вы инкапсулировали эти многочисленные скрипты, которые можно динамически изменять в любое время, помимо основного приложения ?

Я думал о программировании этих сервисов как Python скриптов, которые при необходимости вызываются из основного приложения. Python прост, многоплатформенен и работает отдельно. Это хороший подход? Пожалуйста, не стесняйтесь сказать мне, насколько ужасна эта идея, если она случайно была!

1 Ответ

0 голосов
/ 24 августа 2020

Ну, прошло много времени без ответа, поэтому я даю свой вывод:

После разговора с двумя инженерами по внутреннему программированию они одобрили мое решение, которое заключается в загрузке (используя require) файлы JavaScript для каждой части «надстройки» (называемой в коде «компонентом»), а затем выполнить ее и, наконец, проверить sh кеш.

Это решение позволяет редактировать файлы на go без перезапуска программы и позволяет при желании все организовать в один файл.

// 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 + '"');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...