Ад со вшами жолтыми
Nov. 22nd, 2009 02:15 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
С некоторых пор ничто так не бесит, как восход солнца вручную реализация систем типов и разного рода классов-объектов поверх уже существующих языков.
Вот к примеру, задача: есть система, в ней настройки. Настроек очень дохренища, настройки могут быть привязаны к 4 уровням иерархии(общие, подразделение, профиль пользователя, пользователь), и на каждом уровне переопределять предыдущий.
Формально настройки являются просто очень большим объектом с кучей полей разнообразных типов. Но из-за переопределения, к каждой сущности такой объект не привяжешь, или к каждому полю придется цеплять флаг "есть значение". Поэтому поля хранятся в словаре <имя_поля,значение_поля>. Уже цирк с конями.
Затем начинаются пляски с бубном "как бы это все аккуратно показать в GUI". Нарисовать руками редактор с закладками для 100 полей - увольте, я сдохну это поддерживать, если что-то добавится. Поэтому все поля показываются в гридах(ну типа как в мозиле, about:config, только по категориям разбит, чтобы юзеру проще мышой шароебиццо было). А часть настроек, сука, всякие массивы или списки типа "список подписей и расположения полей в отчетных гридах" или "список кастомных полей документа с подписями и типами". И все это при аккуратной реализации (чтобы было удобно юзеру и не требовало стояния на ушах при поддержке) настолько удалбывает - не передать.
Это еще хорошо, что 2/3 кода для этой пакости генерируется прямо из специальной базы данных, где вся эта модель конфигурации описана и редактируется культурно прямо в гриде, а не блин редактированием тысячестрочных исходников и SQL запросов.
Вот к примеру, задача: есть система, в ней настройки. Настроек очень дохренища, настройки могут быть привязаны к 4 уровням иерархии(общие, подразделение, профиль пользователя, пользователь), и на каждом уровне переопределять предыдущий.
Формально настройки являются просто очень большим объектом с кучей полей разнообразных типов. Но из-за переопределения, к каждой сущности такой объект не привяжешь, или к каждому полю придется цеплять флаг "есть значение". Поэтому поля хранятся в словаре <имя_поля,значение_поля>. Уже цирк с конями.
Затем начинаются пляски с бубном "как бы это все аккуратно показать в GUI". Нарисовать руками редактор с закладками для 100 полей - увольте, я сдохну это поддерживать, если что-то добавится. Поэтому все поля показываются в гридах(ну типа как в мозиле, about:config, только по категориям разбит, чтобы юзеру проще мышой шароебиццо было). А часть настроек, сука, всякие массивы или списки типа "список подписей и расположения полей в отчетных гридах" или "список кастомных полей документа с подписями и типами". И все это при аккуратной реализации (чтобы было удобно юзеру и не требовало стояния на ушах при поддержке) настолько удалбывает - не передать.
Это еще хорошо, что 2/3 кода для этой пакости генерируется прямо из специальной базы данных, где вся эта модель конфигурации описана и редактируется культурно прямо в гриде, а не блин редактированием тысячестрочных исходников и SQL запросов.
no subject
Date: 2009-11-22 03:03 pm (UTC)no subject
Date: 2009-11-22 03:09 pm (UTC)Конфигурация веб-сервиса - sqlite
Основная база данных - mssql
База данных для модели конфигурации - Firebird (ни под что больше нормального GUI-клиента нету).
Кодогенератор из модели в разнообразные sql и C# - на дельфи.
no subject
Date: 2009-11-22 03:44 pm (UTC)no subject
Date: 2009-11-22 03:49 pm (UTC)no subject
Date: 2009-11-22 03:59 pm (UTC)no subject
Date: 2009-11-22 03:57 pm (UTC)no subject
Date: 2009-11-22 04:23 pm (UTC)До того было еще хуже - конфигурация частично в mssql, частично в 150 XML файлах, редактирование оных исключительно руками в notepad2, исходный код на C# превратился в тыкву за 4 года разработки в стиле "вот срочно нужна на завтра фича" и отсутствия четких требований. Т.е. ад троекратный :)
no subject
Date: 2009-11-22 05:00 pm (UTC)PS Можно даже окно с редактором настроек генерировать автоматом, если все знания вынести в атрибуты. Сделать что-то аля Options в Visual Studio (слева дерево, справа всё остальное)
no subject
Date: 2009-11-22 05:09 pm (UTC)Нечитабельно в принципе. Редактированию поддается с трудом. Нет возможности проверки валидности на уровне БД(списки ключей - только в коде).
Я сейчас делаю наоборот: данные изначально в специальной базе данных, из нее генерируются скрипты заполнения основной базы, исходный код объекта с атрибутами, код загрузки-сохранения, и прочее. А от генератора гуи для редактора я отказался - там вылазят такие кошмары, если хочется сделать что-то сложнее редактора простых типов, что проще все таки пока с гридом работать. Да, и дерево там тоже есть.
no subject
Date: 2009-11-22 05:10 pm (UTC)no subject
Date: 2009-11-22 05:19 pm (UTC)Типизированный стаб я сейчас автоматом генерирую.
Сейчас у меня основная война происходит с редактором GUI - там как раз получается путаница "где данные, где метаданные, а где вспомогательные объекты, чтобы это все выглядело и редактировалось культурно".
no subject
Date: 2009-11-22 05:45 pm (UTC)там имено такое. объектная БД поверх реляционной. только аттрибуты переопределяются в иерархии объект - абстрактный документ - внутренний документ - внутреннее поручение...
+ для всех полей права доступа по юзверям и группам %(
no subject
Date: 2009-11-22 05:53 pm (UTC)Несколько раз в разных проектах делал - каждый раз заканчиваю на том, что при используемых инструментах реализовать требуемое силами одного человека за ограниченное время нереально.
а если серпом по яйцам
Date: 2009-11-22 06:43 pm (UTC)/надел каску и залез в окоп/
Re: а если серпом по яйцам
Date: 2009-11-22 06:51 pm (UTC)заебисьхорошо и энтерпрайзно.Но деплоймент и разборки "почему у клиента что-то не работает" превратились бы в нечеловеческий ад. Так я беру свои логи или базу и смотрю что там не так. А так придется выдуривать права доступа к LDAP и пользоваться его безумными средствами запросов, чтобы найти что-нибудь.
Кроме того, ситуация делегирования прав пользователям на настройку системы включила бы в себя админа AD, которые в большинстве случаев как-то на контакт идут неохотно.
no subject
Date: 2009-11-22 06:59 pm (UTC)вариант включения в поставку ldap в виде например openldap? тот же ldap, только бесплатный, и можно плюнуть в глаза виндовому админу с его AD
или там http://directory.apache.org/
no subject
Date: 2009-11-22 07:07 pm (UTC)Вообще, если бы это был "домашний" проект, т.е. где можно в случае чего сесть прямо на производственный сервер и разобраться что к чему - готовое использовать было бы проще. А когда вся диагностика исключительно по обрывкам логов и невнятным переводам с басурманского, я не уверен что морально готов ставить софт, написанный не мной :)
no subject
Date: 2009-11-23 06:31 am (UTC)кстати, а что нынче с отказоустойчивостью и скоростью у них?