Entry tags:
Вуду^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 ведомости, куча проверок, внешних ключей и зависимостей от других модулей)), ради которого это все затевалось, за полдня на оном безумии сделала специально вышедшая из декрета сотрудница.
Но, тем не менее, теперь я понимаю, почему нормальных готовых решений с кодогенерацией опердени почти не существует. Там надо учесть столько мелочей (в модели и кодогенераторе), что это пригодно либо только для очень ограниченных решений, либо становится настолько сложным, что никто этим пользоваться не станет.
Не нашел ничего лучше, как вкрутить первый попавшийся в гугле под руки парсер s-выражений на F#, который был там приведен как пример использования fsyacc и fslex, затем буквально за 5 минут написал конвертор этих выражений в условия для where в sql-запросах.
Т.е., ко всей этой опердени на смеси SQL,F#,дельфи и жутких xml-метаданных еще добавилось и подмножество лиспа :)
Кстати, весь модуль опердени (2 справочника, 4 ведомости, куча проверок, внешних ключей и зависимостей от других модулей)), ради которого это все затевалось, за полдня на оном безумии сделала специально вышедшая из декрета сотрудница.
Но, тем не менее, теперь я понимаю, почему нормальных готовых решений с кодогенерацией опердени почти не существует. Там надо учесть столько мелочей (в модели и кодогенераторе), что это пригодно либо только для очень ограниченных решений, либо становится настолько сложным, что никто этим пользоваться не станет.
no subject
no subject
no subject
no subject
no subject
no subject
Но, имхо, лучше будет так её реализовать -
Генерировали мы опердень, генерировали,
кодогенерилками кодогенерировали, но только
быдло-недо-выкодогенерировали.
no subject
Генеральный Конструктор Генераторов Опердени
Ну можно ещё генерить модель и кодогенератор. Но это занятие для Генеральных Конструкторов.
PS. В моём быдлоадминском воображении после беглого ознакомления с переводом "Practical Common Lisp" (http://pcl.catap.ru) и разными инструкциями по выкрутасам в PowerShell, очень заманчиво выглядит генерация Common Lisp'ом админских скриптов для винды.
no subject
Re: Генеральный Конструктор Генераторов Опердени
А вот в кодогенераторе сгенерить можно только маппинг "база данных моделей -> внутренние структуры" и я пока до этого не добрался, потом сделаю.
no subject
оно самодокументируемое, из модели будет еще и дока в латехе генерироватьсявсе загнется нахер.Скажут делать обычным образом и документировать все - потребую еще больше увеличить зарплату и время на работу увеличить в 4 раза.
no subject
А в остальном - контору жалко.
no subject
А конторе раньше нужно было думать, чтобы я делом занимался, вместо того, чтобы снимать с помощью изучения ФП и хаскеля стресс от переключения между 10 проектами разной степени тупизны.
no subject
no subject
Re: Генеральный Конструктор Генераторов Опердени
no subject