Когда очень много логики и ее вариантов, то появляются разные DSL, которые сами внутри эту логику собирают...
При проектировании DSL просто проектируется возможность как чего делать
Например БД: есть куча данных и огроооомнейшее число как выбирать эти данные и правила выбора... Можно на разный случай накодить всякого, а можно придумать снтаксические конструкции, с помощью которых эта логика сама под капотом выполнится... так появился SQL язык
Ну например есть некоторые правила дял построения акций:
- Если есть один товар такого-то критерия
- Если все товары такого-то критерия
- Если хотя бы один товар такого-то критерия
- Если ни один товар такого криетрия
- ...
Можно на каждый случай запрограть, особенно критерии то разные
А можно придумать некоторый функционал, который бы принимал некоторые правила для разных компаний, которые бы конфигом настраивались, а критерий описывался бы еще одним рпавилом, и тогда любой маркетолог мог бы собирать разные акции