首先考虑一个应用场景:CSDN正在进行的“中国开发者2005大调查”(有奖品拿的,欢迎参加)。这个调查总共要填大概是8张表单,填写的过程中间还有一定的逻辑判断(例如:可能因为表单1中的某个选项而导致表单4不必填写)。这个流程实现的难度,以及实现完成之后业务逻辑的散乱程度,不难想象。我并不打算说我已经找到了解决这一问题的办法,只是把最近一周以来看到、想到的一些东西列在这里,作为一个参考的入口。
考虑另一种编写web应用的思路:一个用例被描述为一个自包含的程序模块,该模块的返回值是用例的最终结果页面。在生成此返回值的时候,需要使用来自用户的输入,此时便生成一个接受输入的表单页面,并将流程挂起等待。等用户输入完成之后,继续往下生成结果页面。如果需要多表单输入,以此类推。这样的一个程序,参见Servlet with Scheme: One Input Form。
(之所以想到这个,是因为前一阵一直在看SICP,捎带手试用了一下DrScheme提供的web server。)
这种方式被称为Continuation。ajoo同志有一篇文章介绍它:从Continuation概念说到它在开发中的应用。在Ruby参考手册中也有一章专门介绍它。同样,Python社群也有介绍它的文章。Sam Ruby有一篇题为“Continuations for curmudgeons”的blog,私以为是讲说得比较清楚的,并且用的基本都是熟悉的语言。但这个标题和第一段有点令人伤心:莫非连我都得被纳入“老家伙”一类了么?
不过,我仍然希望把学院派的概念与实际应用结合起来。IBM developerWorks有一篇题为“用Continuation开发复杂的Web应用程序”的文章,恰好是讲这个问题的。不过,这篇文章用的例子是Cocoon,而Cocoon实现Continuation的方式是JavaScript。另一份文档Scheme in The Real World: A Case Study则更合我的口味。这篇文档介绍了一个在J2EE环境下的、基于Scheme的web框架SISCWeb,这是我打算切入进去的一个项目。另一个基于Continuation的web框架是Seaside,一个Smalltalk作品,我不打算为了它再去学一门新的语言。基于Java的另一个实现是RIFE。
(值得留意的是RIFE的作者Geert Bevin在Sam Ruby那个blog下面的留言:“There are a number of situations where continuations make your life easier, however there are even more situations where they don’t feel natural in a web application. The solution continuations solve best is one where you have a multi-step ‘island of functionality’ that does one particular thing on its own and that shouldn’t be committed to the backend before the final step is finished. These are typically a wizard, a game, a multi-page admin intervention, a survey, ...”)
最后,介绍另一个关于此主题的精彩入口:Continuation-based web programming。而且,我还很乐意借用这篇blog的开篇词来作为本文的结尾:
People reading this blog might be forgiven for thinking that I don't do software development for a living, so here's some technical stuff to even up the balance.
分享到:
相关推荐
【标题】"Java网络程序员看Continuation"指出的是Java网络编程中的一种高级概念——Continuation。在Java领域,Continuation通常关联于异步处理和非阻塞I/O,这对于构建高性能、高并发的网络应用至关重要。 【描述...
在Java网络编程中,"Continuation"是一个相对高级的概念,主要与异步处理和非阻塞I/O有关。本文将深入探讨这个主题,为Java网络程序员提供宝贵的见解。 首先,理解"Continuation"的含义至关重要。在编程领域,...
Continuation是一种编程模式,它允许将一个操作分阶段进行,尤其是在处理长连接和流式数据时非常有用。在WebIM系统中,这种技术可以有效地处理实时性高、数据量大的通信需求。 在WebIM系统中,用户之间的即时消息...
赠送jar包:jetty-continuation-8.1.8.v20121106.jar; 赠送原API文档:jetty-continuation-8.1.8.v20121106-javadoc.jar; 赠送源代码:jetty-continuation-8.1.8.v20121106-sources.jar; 赠送Maven依赖信息文件:...
jetty-continuation-7.4.2.v20110526.jar jetty 服务jar包
Jetty cometd(Continuation)学习笔记,自己用的,别人那down的网页
在计算机科学中,Continuation是一种高级控制结构,它允许我们将当前程序的执行状态打包成一个对象,这个对象可以被保存并在稍后恢复执行。在C#中,Continuation通常通过委托(Delegate)或者匿名方法(Lambda表达式...
- **Moore-Penrose 连续性**:这是一种更通用的方法,适用于处理更高维度的问题,它通过求解广义逆矩阵来实现路径追踪。 #### 3. 唱词处理 在连续过程中,可能会遇到各种类型的奇点,如分岔点和退化点。MATCONT 和...
赠送jar包:jetty-continuation-8.1.8.v20121106.jar; 赠送原API文档:jetty-continuation-8.1.8.v20121106-javadoc.jar; 赠送源代码:jetty-continuation-8.1.8.v20121106-sources.jar; 赠送Maven依赖信息文件:...
- 本节通过一个简单的圆对象示例介绍了如何使用 MATCONT 或 CL_MATCONT 进行动力学系统的连续性分析。 #### 6. 时间积分与庞加莱映射 - **时间积分**:提供了不同时间积分器的比较,以及如何选择合适的积分器。 -...
java运行依赖jar包
C++ 中的 Haskell 延续 monad C++ 中 continuation monad 的基本但有效的实现。 Qt 可以使用它来缓解回调地狱 特色: boost::optional 、 ...也可以看看 Ivan Čukić:使用期货和延续的自然任务调度: GitHub:
stability_power_system_wscc_9"指的是一个关于WSCC(Western Systems Coordinating Council,西部系统协调委员会)9节点电力系统的动态稳定分析项目,其中CPF(Continuation Power Flow)是电力系统分析中的一个...
【标题】"continuation-local-storage-presentation"是一个与JavaScript相关的技术主题,主要聚焦于`continuation-local-storage`(CLS)库的讨论。这个库在JavaScript的异步编程中扮演着重要角色,它提供了一种机制...
电力系统联系潮流的matlab计算程序,可以直接运行。-Contact the trend of power system matlab calculation program can be run directly.
内容概要:本文深入介绍了Continuation Passing Style (CPS) 在功能性编程中的应用。首先定义了尾调用和继续(continuation),并通过具体的函数示例讲解了如何将递归函数转换为尾递归形式。接着详细探讨了 CPS 函数...