Здравствуйте, AndrewVK, Вы писали:
VD>>В сотый раз повторяю: главное в ДСЛ-е — модель.
AVK>Да хоть в двухсотый. Обоснования будут?
Язык — это синтаксис. Интерпретация языка (синтаксиса) есть семантика. Семантика в программах обычно выражается в виде модели.
Например, модель парсера Н2 описана
вот здесь. Она состоит из ряда подмоделей. Например, модель правила грамматики описана
здесь.
Язык описывающий парсер всего лишь наполняет модель конкретным содержимым (описанием языка).
По сему чтобы придумать новую конструкцию языка нужно сначала придумать ее описание в моделе.
У языка может быть разный синтаксис. Но если мы хотим иметь некоторую семантику, то мы будем вынуждены описать соответствющую модель.
Ты, проектируя, ОО-программу точно так же придумываешь модель. Но вместо того чтобы ввести язык который позволил бы просто и очевидно наполнять эту модель, ты придумываешь АПИ манипуляции моделью и забиваешь свой проект говнокодом который через это АПИ взаимодействует с моделью.
AVK>>>Пусть это будет не совсем корректное решение, мне интересно именно на идею посмотреть.
VD>>Идею чего?
AVK>DSL для такого домена
Ты еще не понял, что только ты видишь в приведенном тобой куске использования вашего АПИ — домен. Никто кто видел твой код так и не смог понять что же он реально делает. Понятно что возится с какими-то документами, инвентарными карточками и прочей мурой, но как они друг с другом связаны, как представлены в программе, и какие там взаимосвязи никто понять не может.
AVK>Ты опять скатываешься на реализацию? Как эти правила опишут логику наподобие той, что приведена в моем примере?
Ты просил пример "возможно выдуманный". Я тебе дал выдуманный пример. К логике приведенной в твоем примере мой пример не имеет никакого отношения. Понять логику твоего примера я не в силах. А ты явно не намерен ее объяснять. Вместо описания модели ты мне тут выкатил какие-то странные описания отдельных действий. Причем даже эти описания мало чего объясняют.
AVK>Кому нет никакой разницы? Лично мне разница есть.
Лично ты просто не понимаешь природу ДСЛ-ей. Что забавно ты сам их делал, но природу так и не понял.
VD>> Проме того почти все ДСЛ используются для конфигурации. Скажем грамматика — это конфигурация для парсера. Описание КА — это конфигурация для машины состояний. Бизнес-правила — это конфигурация для движка проверки бизнес-правил.
AVK>Это софистика
Это правда. ДСЛ не что иное как средство конфигурирования модели. А это и есть конфиги, по большому счету.
VD>>Выше я привел пример гипотетических бизнес-правил
AVK>Совершенно непонятный. При этом куча подробностей про файлы и моменты сохранения.
А давай спросим всех тех кто не понял твоего кода, понятен ли им мой ДСЛ? Уверен, что мой ДСЛ поймут куда больше людей чем твой "понятный" тебе код.
Даже если код не ясен, мне не составит труда объяснить семантику. А вот объяснить семантику привденной тобой лапши будет невозможно без описания всех используемых типов (модели).
VD>>. Чтобы привести аналог твоему импертивному коду мне нужно изучить вашу модель.
AVK>Я до сих пор не понимаю, о чем речь.
О ОО-модели твоего приложения, без которой нельзя понять происходящего в твоем коде.
Право не могу поверить, что реально не понимаешь что от тебя хотят.
Никому не нужно описание этого кода. Оно станет очевидным после того, как будет описана модель которой он манипулирует. А без этого объяснение отдельных операторов ничего не даст.
VD>>Ужасы заключается в том, что в коде моного деталей реализации не относящихся к делу.
AVK>Каких именно? Конкретно.
Например, вот эти строки:
UncarryDocuments(objectsIds);
var cardsDeleteSet = new HashSet<IInventoryCardBase>();
var documents = Manager.Get(objectsIds);
не имеют никакого отношения к решаемой задачи. Это чисты болерплэйт. Вызван он тем, что описание ведется не на подходщем для этого языке, а на универсальном зыке с использованием АПИ. Ну, и такого кода в этом примере большая часть.
VD>> Куча приведений типов. Вызовов АПИ и т.п.
AVK>Нет там никакой кучи.
Там ужасная лапша. И только ты, привыкший к ней, не можешь (не хочешь) этого заметить. А ведь тебе уже человека 4 сказали это.
VD>> Я чую, что большая часть из приведенного лишняя.
AVK>Кроме твоего чутья — есть что нибудь, что можно обсуждать?
Конечно! Опиши модель на базе которой построена эта лапша и я обязательно постараюсь написать код достаточный для решения проблемы.
Но, ты меня уж извини. Отвечать еще на одно сообщения в стиле "да там все ОК... да там все очевидно..." я не буду. Если тебе интересен ответ, то потрудись описать все объекты участвующие в коде, все связи между ними, и опиши почему все именно так.