metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-03-31 05:40 pm

Вуду^5

Генерил кодогенератором опердень, понадобилось добавить способ описания предикатов проверки прав доступа пользователей (типа "этот пользователь видит только данные своего филиала, или же только относящиеся к налоговой инспекции в городе где этот филиал"). Ну отдельные проверки понятно - запрос типа "exists(select 1 from UserDepartments where UserID=current_user and DeptID=OperdenTable_DeptID)" но мне понадобилось их объединять в итоговый предикат отдельно описанными логическими функциями.
Не нашел ничего лучше, как вкрутить первый попавшийся в гугле под руки парсер s-выражений на F#, который был там приведен как пример использования fsyacc и fslex, затем буквально за 5 минут написал конвертор этих выражений в условия для where в sql-запросах.

Т.е., ко всей этой опердени на смеси SQL,F#,дельфи и жутких xml-метаданных еще добавилось и подмножество лиспа :)

Кстати, весь модуль опердени (2 справочника, 4 ведомости, куча проверок, внешних ключей и зависимостей от других модулей)), ради которого это все затевалось, за полдня на оном безумии сделала специально вышедшая из декрета сотрудница.

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

[identity profile] denisioru.livejournal.com 2010-03-31 06:09 pm (UTC)(link)
"Генерил кодогенератором опердень" звучит как скороговорка.

[identity profile] dmzlj.livejournal.com 2010-03-31 06:09 pm (UTC)(link)
Угу.

[identity profile] theiced.livejournal.com 2010-03-31 10:07 pm (UTC)(link)
А у меня в гродно есть психиатрша знакомая. Работает в больничке с особо запущенными случаями (15км от гродно). Познакомить?

Генеральный Конструктор Генераторов Опердени

[identity profile] geovit.livejournal.com 2010-04-01 04:47 am (UTC)(link)
Но, тем не менее, теперь я понимаю, почему нормальных готовых решений с кодогенерацией опердени почти не существует. Там надо учесть столько мелочей (в модели и кодогенераторе), что это пригодно либо только для очень ограниченных решений, либо становится настолько сложным, что никто этим пользоваться не станет.
Ну можно ещё генерить модель и кодогенератор. Но это занятие для Генеральных Конструкторов.
PS. В моём быдлоадминском воображении после беглого ознакомления с переводом "Practical Common Lisp" (http://pcl.catap.ru) и разными инструкциями по выкрутасам в PowerShell, очень заманчиво выглядит генерация Common Lisp'ом админских скриптов для винды.

[identity profile] aamonster.livejournal.com 2010-04-01 06:28 am (UTC)(link)
Циничный вопрос: а насколько благородный рэб документирует кодогенераторы для опердени? Т.е. когда его заберут в дурдом - фирма загнётся или нет? ;-)