Я создал программу на JavaScript в стиле MVC. В комплекте с M и C. Возможно, я сделал неправильный шаг, но в итоге я создал собственную библиотеку диспетчера событий. Я убедился, что различные уровни обмениваются данными только с использованием протокола сообщений, который может быть преобразован в чистые объекты JSON (даже если я на самом деле не делаю этот шаг преобразования).
Так что jquery живет в основном в V части архитектуры MVC. На стороне M и C у меня есть прежде всего код, который может работать в автономной CLI-версии spidermonkey или в серверной реализации javascript для носорогов, если это необходимо. Таким образом, если требования изменятся позже, я смогу запускать слои M и C на стороне сервера, передавая через эти сообщения json сторону V в браузере. Чтобы изменить это, потребовались бы только некоторые изменения в моем диспетчере сообщений. В будущем, если браузеры получат какие-то одноранговые технологии, я мог бы, например, запускать их в разных браузерах.
Однако на данный момент все три уровня работают в одном браузере. Созданный мной диспетчер событий разрешает многоадресные сообщения, поэтому реализовать функцию отмены теперь так же просто, как создать новый объект, который просто прослушивает сообщения, которые необходимо отменить. Автосохранение состояния на сервер - аналогичный маневр. Я могу сделать полную детальную отладку и профилирование в диспетчере событий. Я могу точно определить, как выполняется код и как быстро, когда и где, все из этого центрального бита кода.
Конечно, главный недостаток, с которым я столкнулся, это то, что я не очень хорошо справился со сложностью вещи. Для этого, если бы у меня было все, что нужно сделать, я бы очень внимательно изучил парадигму «функциональная реактивность». Существует одна существующая реализация этой парадигмы в javascript, называемая flapjax. Я бы позаботился о том, чтобы слой представления следовал этой модели выполнения, если бы не использовалась специально библиотека flapjax. (Я не уверен, что сам flapjax - это отличное воплощение идеи, но сама идея важна).
Другая большая реализация функциональной реактивной функции - это кварцевый композитор, который поставляется бесплатно с инструментами разработчика Apple (которые бесплатны при покупке любого Mac). Если это доступно для вас, внимательно посмотрите на это, и как это работает. (у него даже есть патч javascript, так что вы можете создать прототип вашего приложения с помощью встроенного слоя представления)
Основной вывод из функционально-реактивной парадигмы состоит в том, чтобы убедиться, что представление не поддерживает никаких состояний, кроме того, которое вы только что дали для отображения. Чтобы выразить это более конкретно, я начал с сообщений типа «Добавить объект на экран», «удалил объект с экрана», и теперь я больше склоняюсь к «отображению этого списка объектов, и я Позвольте вам выяснить наиболее эффективный способ перехода от текущего отображения к тому, что я сейчас хочу, чтобы вы отображали ». Это устранило целый ряд ошибок, связанных с небрежно управляемым состоянием.
Это также позволяет обойти другую проблему с ошибками, вызванными сообщениями, поступающими в неправильном порядке. Это большой вопрос, который нужно решить, но вы можете обойти его, просто отправив в одном большом пакете конечное желаемое состояние, а не последовательность шагов, чтобы туда добраться.
В любом случае, это моя маленькая напыщенная речь. Дайте мне знать, если у вас есть дополнительные вопросы о моем военном опыте.