jeurey
Фев. 19, 2009 12:29:28
Доброго времени суток, ув. форумчане.
Во-первых, только вливаюсь в ряды питонщиков - поэтому просьба сильно по почкам не бить. Однако, топик прошу оставить в разделе для экспертов, ибо задача не для новичков :)
Во-вторых, пишу свое первое приложение (кроме Hello, world) и встретился с несколькими возможными проблемами. Все они решаемы тупым методом деления на разные дистрибутивы ПО - но вариант этот мне не очень нравится: поддерживать в актуальном состоянии одну ветку для одного программиста всегда проще, чем три.
1. Архитектура
2. Визуализация
3. Установка на разные платформы
Для того, чтобы точнее задавать вопросы - опишу суть задачи.
Необходимо написать приложение, которое будет работать в двух эпостасиях:
1. Как десктоп-приложение на POSIX/Windows системах
2. Как вебсервис
Задачи таковы: софт будет использовать сеть в целях доступа к некоторой информации с последующим ее анализом. Вполне возможно, что будет использовать прокси для анонимности. Т.к. не все себе могут позволить широкие каналы (увы) - в десктоп приложении планируется поставить галочку “использовать вебсервис”, которая будет включать маршрутизацию запросов на центральный сервер/один из группы серверов и получать уже обработанные данные.
Таким образом, в двух вариантах работы (и на десктоп и на вебсервисе) должна иметься возможность принимать/обрабатывать запросы и отдавать результат. Для этой цели хочу использовать XMLRPC/SOAP запросы и отделение функциональной части приложения в отдельные библиотеки, дабы апдейтить код централизованно (исправил что-то - отразилось и на клиентах, и на сервере)
Но использовать XMLRPC/SOAP на десктопе, по крайней мере, странно, не правда ли? Пока забьем на этот вопрос- он решаем архитектурно.
Второй вопрос касается непосредственно визуализации:
1. Вебсервис должен отдавать xml или любой другой формат, который будет ближе к сердцу - тоже пока некритично. Вполне возможно, что будет еще web-интерфес к этому делу (c намеком на JSON).
2. Десктоп-приложение должно отображать данные по своему. В качестве универсальной DE хочу использовать GTK (не очень хочется поддерживать множество оконных интерфесов - это путь регрессивный изначально).
А теперь сам вопрос: как грамотно разделить отображение от логики. Понятно, что есть MVC - но мне он как-то не очень нравится по причине разнородности сред (Web/Desktop). Можно применить MVC в веб-части - просто рендерить данные в HTML/XML/JSON - это не проблема. Можно применить в Десктоп-приложении - суть та же. Но чтобы работа была прозрачной и в web-контроллере и в контроллере десктоп-приложения… Хех =)
Если есть какие-то пожелания или кто-то наступал на грабли по приниципам, описанным мною - прошу высказаться. Насколько оправдано использование GTK и стороннего формата удаленного вызова процедур. Насколько оправданно пытаться написать универсально? Задача ведь нетривиальная далеко (до сих пор не видел софта, который работает и под веб и под десктоп).
Третье, что меня очень смущает - процесс инсталляции моего приложения под win. Видел в сети набор “All-in-One win32 python installer.” - если кто работал, выскажите свое мнение, если не сложно… Про никсы пока молчу: пока Nix-системы удел гиков, в основном - сами разберутся )
ЗЫ: Задавал вопрос на винграде - пока ответов нет. Может, хоть здесь помогут :)
Заранее, спасибо ;)
igor.kaist
Фев. 19, 2009 12:37:51
jeurey
Третье, что меня очень смущает - процесс инсталляции моего приложения под win.
Отвечу на этот вопрос: py2exe выход из проблемы. Собираешь и не задумываешься над установкой пользователями.
clopomor
Фев. 19, 2009 12:42:10
подивіться як приклад
http://www.openobject.com/тільки вам ГТК клієнта потрібно буде переробляти так щоб був механізм синхронізації і використання локальної бази (наприклад SQLITE/Firebird) з центральною, щоб той клієнт міг виступати і автономною програмою
jeurey
Фев. 19, 2009 12:54:16
clopomor
подивіться як приклад http://www.openobject.com/
тільки вам ГТК клієнта потрібно буде переробляти так щоб був механізм синхронізації і використання локальної бази (наприклад SQLITE/Firebird) з центральною, щоб той клієнт міг виступати і автономною програмою
Не совсем понимаю украинский. Я так понял, что прийдется отдельно работать над GTK-клиентом, чтобы синхронизировать локальную базу с центральной.
Возникает вопрос - что сложного?
Внутренний формат общения (XMLRPC/SOAP) есть XML-документ. Если его кешировать - все отлично получается:
1. Запрос на сервер с указанием своих идентификаторов (уникальных, например, по time)
2. Получение несуществующих локально документов и отсыл несуществующих на сервер
Такая же схема работает и для web-клиента и для десктоп. Сервис - та же схема. Таким образом можно синхронизировать три-четыре-N клиентов без ущерба. Это означает то, что код по синхронизации ляжет в ядро системы, работающей на всех трех платформах (Десктоп/Web клиентов и Web-сервис). Наверное, моим упущением было не сказать о том, что система занимается обменом документами (хотя, упомянул о том, что клиент может получать обработанные данные, что можно считать документами (файлами))
Все различие между тремя платформами сводится к формату вызова локальных/удаленных процедур. Единственное между ними различие должно сводиться только к визуальному интерфейсу.
tretiy3
Фев. 20, 2009 09:21:16
jeurey
Все различие между тремя платформами сводится к формату вызова локальных/удаленных процедур. Единственное между ними различие должно сводиться только к визуальному интерфейсу.
Так, а зачем вообще делать это различие? Напишите всю систему как web приложение. Сильно упростите себе жизнь.
Ferroman
Фев. 20, 2009 14:10:10
Тут не на что отвечать, потому что нет вопроса.
Я не вижу проблемы. Разделите всё грамотно, да и прикручивайте как интерфейс все что хотите. Просто прослойки между приложением и интерфейсом разные будут, в зависимости от нужд и особенностей интерфейса.
DarkAnthey
Фев. 24, 2009 09:56:15
Если сделать клиент серверное приложение. И клиент и сервер какая то проблема запустить на одной машине. Странный пост.
jeurey
Фев. 24, 2009 19:17:56
tretiy3
Так, а зачем вообще делать это различие? Напишите всю систему как web приложение. Сильно упростите себе жизнь.
Как попросить виндузятников установить mod_python в денвер? На этом форуме есть примеры таких попыток (
http://python.su/forum/viewtopic.php?id=1778) =)
PooH
Фев. 25, 2009 05:49:05
jeurey
tretiy3
Так, а зачем вообще делать это различие? Напишите всю систему как web приложение. Сильно упростите себе жизнь.
Как попросить виндузятников установить mod_python в денвер? На этом форуме есть примеры таких попыток (http://python.su/forum/viewtopic.php?id=1778) =)
А зачем вам денвер? Используйте легкие сервера на питоне, тот-же CherryPy например, его можно и как службу запустить под виндой
tretiy3
Фев. 25, 2009 10:15:57
PooH
jeurey
tretiy3
Так, а зачем вообще делать это различие? Напишите всю систему как web приложение. Сильно упростите себе жизнь.
Как попросить виндузятников установить mod_python в денвер? На этом форуме есть примеры таких попыток (http://python.su/forum/viewtopic.php?id=1778) =)
А зачем вам денвер? Используйте легкие сервера на питоне, тот-же CherryPy например, его можно и как службу запустить под виндой
+1
У меня под виндой стоит Zope. Схема такая: Apache -> Twisted -> wsgi … и поехали.