Найти - Пользователи
Полная версия: Нетривиальное приложение. Нужна критика.
Начало » Python для экспертов » Нетривиальное приложение. Нужна критика.
1 2
jeurey
Доброго времени суток, ув. форумчане.

Во-первых, только вливаюсь в ряды питонщиков - поэтому просьба сильно по почкам не бить. Однако, топик прошу оставить в разделе для экспертов, ибо задача не для новичков :)

Во-вторых, пишу свое первое приложение (кроме 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
jeurey
Третье, что меня очень смущает - процесс инсталляции моего приложения под win.
Отвечу на этот вопрос: py2exe выход из проблемы. Собираешь и не задумываешься над установкой пользователями.
clopomor
подивіться як приклад http://www.openobject.com/
тільки вам ГТК клієнта потрібно буде переробляти так щоб був механізм синхронізації і використання локальної бази (наприклад SQLITE/Firebird) з центральною, щоб той клієнт міг виступати і автономною програмою
jeurey
clopomor
подивіться як приклад http://www.openobject.com/
тільки вам ГТК клієнта потрібно буде переробляти так щоб був механізм синхронізації і використання локальної бази (наприклад SQLITE/Firebird) з центральною, щоб той клієнт міг виступати і автономною програмою
Не совсем понимаю украинский. Я так понял, что прийдется отдельно работать над GTK-клиентом, чтобы синхронизировать локальную базу с центральной.
Возникает вопрос - что сложного?

Внутренний формат общения (XMLRPC/SOAP) есть XML-документ. Если его кешировать - все отлично получается:
1. Запрос на сервер с указанием своих идентификаторов (уникальных, например, по time)
2. Получение несуществующих локально документов и отсыл несуществующих на сервер

Такая же схема работает и для web-клиента и для десктоп. Сервис - та же схема. Таким образом можно синхронизировать три-четыре-N клиентов без ущерба. Это означает то, что код по синхронизации ляжет в ядро системы, работающей на всех трех платформах (Десктоп/Web клиентов и Web-сервис). Наверное, моим упущением было не сказать о том, что система занимается обменом документами (хотя, упомянул о том, что клиент может получать обработанные данные, что можно считать документами (файлами))

Все различие между тремя платформами сводится к формату вызова локальных/удаленных процедур. Единственное между ними различие должно сводиться только к визуальному интерфейсу.
tretiy3
jeurey
Все различие между тремя платформами сводится к формату вызова локальных/удаленных процедур. Единственное между ними различие должно сводиться только к визуальному интерфейсу.
Так, а зачем вообще делать это различие? Напишите всю систему как web приложение. Сильно упростите себе жизнь.
Ferroman
Тут не на что отвечать, потому что нет вопроса.
Я не вижу проблемы. Разделите всё грамотно, да и прикручивайте как интерфейс все что хотите. Просто прослойки между приложением и интерфейсом разные будут, в зависимости от нужд и особенностей интерфейса.
DarkAnthey
Если сделать клиент серверное приложение. И клиент и сервер какая то проблема запустить на одной машине. Странный пост.
jeurey
tretiy3
Так, а зачем вообще делать это различие? Напишите всю систему как web приложение. Сильно упростите себе жизнь.
Как попросить виндузятников установить mod_python в денвер? На этом форуме есть примеры таких попыток (http://python.su/forum/viewtopic.php?id=1778) =)
PooH
jeurey
tretiy3
Так, а зачем вообще делать это различие? Напишите всю систему как web приложение. Сильно упростите себе жизнь.
Как попросить виндузятников установить mod_python в денвер? На этом форуме есть примеры таких попыток (http://python.su/forum/viewtopic.php?id=1778) =)
А зачем вам денвер? Используйте легкие сервера на питоне, тот-же CherryPy например, его можно и как службу запустить под виндой
tretiy3
PooH
jeurey
tretiy3
Так, а зачем вообще делать это различие? Напишите всю систему как web приложение. Сильно упростите себе жизнь.
Как попросить виндузятников установить mod_python в денвер? На этом форуме есть примеры таких попыток (http://python.su/forum/viewtopic.php?id=1778) =)
А зачем вам денвер? Используйте легкие сервера на питоне, тот-же CherryPy например, его можно и как службу запустить под виндой
+1
У меня под виндой стоит Zope. Схема такая: Apache -> Twisted -> wsgi … и поехали.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB