О выборе инструментов.
Октябрь 23, 2008 – 10:21 ппПри разработке более-менее крупных проектов всегда (а всегда ли?) стоит вопрос об использовании средств поддержки разработки, библиотек и фреймворков. Даже при реализации обычных задач использование стандартных библиотек и протоколов в последствии может вылезти боком. Недавно имела место такая ситуация.
Последние 4-5 месяцев я занимался реализацией ядра системы сервисов для внутренних нужд предприятия. Проект и все сопутствующие ему программы и сервисы реализовывались на платформе Python с использованием формата передачи данных JSON, потому возможности динамического языка использовались на полную катушку. Недавно пришлось реализовывать клиентскую библиотеку к нашей системе для проекта использующего .Net. Само по себе ничего сложного в этом не было – вся динамика python была сымитирована использованием NullableTypes (на тот случай если передаваемая структура является полиморфной и не все поля присутствуют при каждом ответе/запросе), проблемы начались когда пришлось entity классы этой библиотеки передавать через внутренние web-сервисы, которые в .net реализованы с использованием протокола SOAP. Выяснилось, что реализация протокола SOAP в .Net framework не поддерживает передачу полиморфных структур или NullableTypes. Для этого было сделано решение, на мой взгляд представляющее собой костыль – были написаны две обёртки (со стороны клиента и web-сервиса .net проекта), которые скрывали сериализацию entity классов в бинарный формат. Вот и получилось, что классы, которые успешно передавались от python-сервисов .net web-сервисам для передачи клиенту приходится сериализовывать два раза (класс -> бинарная сериализация -> soap-сериализация).
К чему бы все это? Это к вопросу о выборе библиотек и протоколов. Даже во время реализации небольших проектов могут возникать проблемы из-за использования стандартных решений. Как уже написано выше, для передачи данных к/от python-сервисам были использован формат сериализации данных JSON. Так как фреймворков для построения rpc-сервисов на основе JSON нет, пришлось реализовывать все с нуля на основе web-сервера CherryPy и наших внутренних разработок.
Это не призыв к отказу от фреймворков. Наоборот, лично мне очень нравится Django, их необходимо использовать, но там где это необходимо.
Комментарии:
>>но там где это необходимо
Это уж бесспорно )
Плюс все эти высокоуровневые навороты даже без очевидной избыточности ощутимо снижают производительность конечного продукта – повышая, надо понимать, производительность отдельно взятого разработчика.
* Помнится, при разработке entities-средств для .net девтим ставил задачу примерно так: “это не должно лажать по производительности _больше чем в 3 раза_”. И т.п.
(btw: у тебя openid меня не пускает)
By CGVictor on Окт 23, 2008
Все-таки без ORM разного калибра (rich, anemic), как правило, довольно сложно поддерживать код. Естественно, надо представлять себе сложность и ресурсоемкость решения. Например, часто при использовании sqlalchemy/elixir приходилось, наравне с использованием высокоуровневого кода, писать чуть ли не sql, но все-равно в терминах sqlalchemy, т.к. в таком случае поддерживать код становилось гораздо проще, а по эффективности ни чем не отличалось, если бы писался напрямую в СУБД.
(PS: openid вроде починил)
By Roinet on Окт 24, 2008
Спасибо! а еще посты на эту тему будут?
By Caurnant on Дек 22, 2008
Будут. Правда совсем времени нет писать посты.
By Roinet on Дек 22, 2008