Извините, я не мог придумать лучшего названия.
Проблема заключается в следующем:
Для нашего клиента мы создали (как часть более крупного приложения)
графический дизайнер, который они могут использовать для построения "сценариев".
Эти сценарии состоят из «Композитов», которые, в свою очередь, состоят из
"Команды". Все эти командные объекты являются производными от CommandBase и
реализовать интерфейс под названием ICompilable.
Класс сценария также реализует ICompilable. Когда вызывается Compile ()
по команде возвращается массив байтов, который затем можно отправить на устройство
для чего они предназначены (не могу раскрыть много информации об этом оборудовании, извините)
Просто чтобы дать вам представление:
var scenario = new Scenario();
scenario.Add(new DelayCommand(1));
scenario.Add(new CountWithValueCommand(1,ActionEnum.Add,1));
scenario.Add(new DirectPowerCommand(23,false,150));
scenario.Add(new WaitCommand(3));
scenario.Add(new DirectPowerCommand(23,false,150));
scenario.Add(new SkipIfCommand(1,OperatorEnum.SmallerThan,10));
scenario.Add(new JumpCommand(2));
byte[] compiledData = scenario.Compile();
Графический дизайнер абстрагирует все это от пользователя и позволяет
ему (или ей) просто перетаскивать по капле композиты на дизайнерскую поверхность.
(Композиты могут группировать команды, чтобы мы могли предоставить строительные блоки для возврата задач)
Недавно наш клиент пришел к нам и сказал: «Ну, дизайнер действительно классный,
но у нас есть люди, которые предпочли бы какой-то язык программирования,
просто что-то простое. "
(Простой для них, конечно)
Я бы очень хотел предоставить им простой язык,
которые могут вызывать различные команды, а также заменять SkipIfCommand на
более приятная структура и т.д ...
Я понятия не имею, с чего начать или какие у меня есть варианты (не нарушая того, что имеем)
Я слышал о людях, внедряющих такие языки, как Python,
люди пишут на своем языке парсеры и т.д ...
Есть предложения?
PS: пользователи работают только с композитами, но не с командами.
Композиты загружаются динамически во время выполнения (вместе с их графическим дизайнером)
и могут быть предоставлены третьими лицами в отдельных сборках.