Twisted Django Comet (Orbited): взаимодействие верхнего и среднего уровня - PullRequest
0 голосов
/ 29 февраля 2012

Я разрабатываю систему мониторинга (что-то вроде веб-приложения в реальном времени).И вопрос об архитектуре системы.Устройство подключается к серверу и отправляет информацию о состоянии контролируемых параметров.Сервер должен сохранить информацию в базе данных и уведомить сервер Comet.Сервер Comet отправляет пользователю сообщение о том, что новые данные доступны.Пользователь получает новую информацию.Как лучше всего анализировать и сохранять информацию (при необходимости, создавать аварийные сообщения) о состоянии устройства:

  1. Приложение Twisted самоанализирует и взаимодействует с БД (adbapi) и сервером Comet (Orbited).
  2. Twisted отправляет полученные данные в Django (как нажать?), И Django анализирует и сохраняет данные в БД и отправляет флаг "NEW" на орбиту.
  3. Любые Ваши предложения, если есть лучший способ.

Более подробную информацию вы можете найти на фотографиях ниже: First architecture Second architecture

1 Ответ

2 голосов
/ 29 февраля 2012

Этот вопрос довольно открытый.Кто-то мог бы написать дюжину страниц для каждого из описанных вами вариантов, и еще раз - несколько других подходов в качестве бонуса.

Вместо этого я выберу альтернативный маршрут.

Убедитесь, что у вас есть хорошее понимание ваших требований.Подумайте, какой подход будет наиболее простым для вас (или для разработчиков в вашей команде), чтобы удовлетворить эти требования.Используйте этот подход, документируя общую идею и тестируя все, что вы пишете (желательно с использованием TDD).

Когда вы закончите, у вас может не быть оптимального решения, но у вас будет решение, и 99Временами из 100 это неотличимо от оптимальности.

Если я немного подумаю о ваших предложенных подходах, то в основном мне приходит в голову то, что они не сильно отличаются друг от друга.Ваш анализ - это просто какой-то код Python, который вы собираетесь вызывать.Вызываете ли вы его ближе к некоторому коду, использующему Twisted, или ближе к некоторому коду, использующему Django, похоже, не имеет большого значения для результата.Возможно, какая-то часть ваших требований сделает один подход лучше другого.Тем не менее, если у вас есть модульные тесты и вы понимаете свои требования, тогда я ожидаю, что вам действительно будет легко переключаться между этими двумя подходами.

После того, как вы что-то реализовали, у вас будет намного лучшепонимание компромиссов, и вы будете в лучшем положении, чтобы решить, будет ли одна реализация работать лучше или хуже другой.

Обратите внимание, что модульные тесты являются довольно важной частью этой идеи.Без них вы на самом деле не будете знать, реализовали ли вы свои требования, вы не узнаете, работает ли ваша функциональность после какого-либо конкретного рефакторинга, и сам рефакторинг будет сложнее, потому что ваши юниты не будут так четко определены и изолированыкак если бы вы занимались разработкой на основе тестов.

...