Прежде всего, это решение весьма неплохое. Если действия не разделены, я имею в виду, что нет глобальных параметров или других скрытых зависимостей между различными действиями или между действиями и средой, это хорошее решение. Легко поддерживать или читать, а когда вам нужно расширить функциональность, вам нужно просто добавить новые действия, когда «количество» меняется, вам нужно просто добавить или удалить строки из последовательности макросов. Если нет необходимости часто менять цепочку процессов: не двигайтесь !
Если это система, в которой реализация действий не часто изменяется, но их порядок и параметры да, вы можете разработать простой язык сценариев и преобразовать класс макросов в этот сценарий. Этот сценарий должен поддерживать кто-то, кроме вас, кто-то, кто знаком с проблемной областью на уровне ваших «действий». Таким образом, он / она может собрать приложение, используя язык сценариев, без вашей помощи.
Один хороший подход для такого разделения задач - программирование потока данных (например, программирование на основе потоков). В программировании потока данных есть заранее написанные компоненты . Компоненты являются черными ящиками (с точки зрения разработчика приложения), они имеют порты потребителя (вход) и производителя (выход), которые могут быть подключены для формирования сети обработки, которая затем является приложением. Если для домена имеется хороший набор компонентов, многие приложения могут быть созданы без программирования новых компонентов. Также компоненты могут быть построены из других компонентов (они называются составными компонентами).
Википедия (хорошая отправная точка):
http://en.wikipedia.org/wiki/Dataflow_programming
http://en.wikipedia.org/wiki/Flow-based_programming
Сайт JPM (книга, вики, всё):
http://jpaulmorrison.com/fbp/
Я думаю, у больших систем должна быть точка разделения, которую вы описываете как "макрос". Даже игры имеют эту точку зрения, например В играх FPS есть 3D-движок и сценарий игровой логики, или есть SCUMM VM, которая одинакова.