Являются ли продолжения ключевой особенностью Seaside?

Я пытаюсь освоить Smalltalk/Seaside. Согласно Википедии, «Seaside — это инфраструктура веб-приложений, основанная на продолжении». Исходя из фона Java, я не очень хорошо знаком с продолжениями.

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

Это наиболее актуально для Seaside в отношении использования кнопки «назад»? Использование блоков кода и «обратных вызовов» НЕ совпадает с использованием продолжений?

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

Большое спасибо за любой полезный вклад в установление меня прямо с этим!


person Justin    schedule 26.11.2011    source источник


Ответы (2)


Первоначально Seaside использовала продолжения для моделирования потока между страницами и включения кнопки «Назад». Это уже не актуально для Seaside 3.0: продолжения совершенно необязательны. Если вы хотите использовать функции call: и answer:, вы можете загрузить пакет Seaside-Flow. В противном случае приложение Seaside не будет продолжено.

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

Обновление: в Seaside 3.0 состояние управляется путем сохранения специального объекта для каждого запроса. Этот объект запоминает состояние приложения на тот момент времени. Если пользователь вернется, объект знает, как восстановить и вернуться к предыдущему состоянию. В этом отношении этот объект ведет себя как продолжение (класс называется WASessionContinuation), но его реализация сильно отличается. Он не делает снимок стека выполнения, а только определенные части состояния приложения (поэтому потребляется меньше памяти). Кроме того, он не прыгает куда-то в код, как это сделало бы продолжение, а вместо этого реализует необходимую логику возобновления как часть метода шаблона WASessionContinuation>>#handleRequest (поэтому он быстрее).

person Lukas Renggli    schedule 26.11.2011
comment
Спасибо за ответ. если продолжения использовались для управления состоянием, но больше не используются по умолчанию в Seaside 3.0, то как теперь по-другому управляется состояние? - person Justin; 28.11.2011
comment
@Jusin: Хороший дополнительный вопрос. По космическим соображениям я добавил свой ответ к исходному ответу. - person Lukas Renggli; 28.11.2011
comment
спасибо за добавление дополнительной информации. последний вопрос (надеюсь). в типичном обратном вызове (как показано здесь seaside.st/documentation/maintaining-state) где после завершения обратного вызова действия повторно отображается тот же экземпляр компонента. Seaside поддерживает состояние переменных экземпляра между запросами. относится ли это вообще к продолжениям или в Seaside 3.0 к поведению, похожему на продолжения, но реализованному по-другому? - person Justin; 29.11.2011
comment
@Justin: продолжение обычно просто фиксирует состояние стека выполнения. Состояние компонентов (и других объектов с возвратом) хранится в экземпляре WASnapshot, который кэшируется вместе с WASessionContinuation (или ранее вместе с реальным WAContinuation). - person Lukas Renggli; 01.12.2011

Продолжения — это ключевая функция, показывающая, что можно заниматься веб-программированием, используя правильные абстракции. Это позволяет Seaside привлекать умных разработчиков, которым нравится разрабатывать на правильном уровне абстракции, что приводит к повышению производительности. Но это не означает, что это правильная абстракция для вашего веб-приложения или что она нужна в Seaside.

person Stephan Eggermont    schedule 28.11.2011