【问题标题】:Are continuations a key feature in Seaside?延续是 Seaside 的关键功能吗?
【发布时间】:2011-11-26 15:10:27
【问题描述】:

我正在努力了解 Smalltalk / Seaside。根据Wikipedia 的说法,“Seaside 是一个基于 continuation 的 Web 应用程序框架”。来自 Java 背景,我对延续不是很熟悉。

经过阅读,我了解到延续用于维护状态,从而保存进程的快照并可以稍后恢复(类似于将 Windows 置于休眠模式)。

这与 Seaside 最相关的是“返回”按钮的使用吗? 使用代码块和“回调”与使用延续不一样?

我也在尝试评估当前在 Seaside 中实际使用延续的重要性。我很困惑,因为许多对 Seaside 的在线参考都提到延续是一个关键和定义特征。但是,我也发现一些文章提到在 Seaside 中使用延续并不常用,实际上也不是关键特性。

非常感谢您提供任何有用的意见,让我明白这一点!

【问题讨论】:

    标签: smalltalk continuations seaside


    【解决方案1】:

    最初 Seaside 使用延续来模拟页面之间的流程并启用后退按钮。 Seaside 3.0 不再是这样:延续是完全可选的。如果你想使用call: and answer: functionality,你可以加载包Seaside-Flow。否则,Seaside 应用程序将免费继续。

    无论哪种方式,作为 Web 应用程序开发人员,您永远不会看到(或看到)延续。它们是一个很好地封装在 Seaside Web 框架中的实现细节。

    更新:在 Seaside 3.0 中,状态是通过为每个请求存储一个特殊对象来管理的。该对象会及时记住应用程序的状态。如果用户回来,对象知道如何恢复和恢复之前的状态。在这方面,这个对象的行为就像一个延续(该类称为WASessionContinuation),但它的实现非常不同。它不会对执行堆栈进行快照,而只会对应用程序状态的特定部分进行快照(这就是消耗更少内存的原因)。它也不会像延续那样跳转到代码的某个地方,而是将必要的恢复逻辑作为模板方法WASessionContinuation>>#handleRequest 的一部分实现(这就是它更快的原因)。

    【讨论】:

    • 感谢您的回复。如果延续用于管理状态,但在 Seaside 3.0 中默认不再使用,那么现在如何以不同的方式管理状态?
    • @Jusin:很好的后续问题。由于篇幅原因,我将我的答案添加到原始答案中。
    • 感谢您添加更多信息。最后一个问题(我希望)。在典型的回调中(如此处所示seaside.st/documentation/maintaining-state),其中“在操作回调完成后,相同的组件实例会重新显示”。 Seaside 在请求之间维护实例变量的状态。这是否与延续有关,或者在 Seaside 3.0 中与延续类似但实施方式不同的行为有关?
    • @Justin:延续通常只是捕获执行堆栈的状态。组件(以及其他回溯对象)的状态保存在 WASnapshot 实例中,该实例与 WASessionContinuation(或之前与真实的 WAContinuation 一起缓存)一起缓存。
    【解决方案2】:

    Continuations 是一个关键特性,它表明可以使用正确的抽象进行 Web 编程。这使得 Seaside 能够吸引聪明的开发人员,他们喜欢在正确的抽象级别上进行开发,从而提高生产力。但这并不意味着它是您的 Web 应用程序的正确抽象,也不意味着 Seaside 需要它。

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 2016-01-03
      • 1970-01-01
      • 2017-09-28
      • 2021-08-13
      相关资源
      最近更新 更多