【发布时间】:2009-04-30 13:34:55
【问题描述】:
我最近从事的一些 Web 项目使用流引擎作为演示和/或(或多或少)业务层的中心抽象。回顾我的经历,老实说,我不喜欢以流程为中心的方法。甚至相反。我看到在使用流作为中心抽象的项目中会出现相同的症状。
一切都是流程。您不只是启动一个应用程序,不,您“进入主流程”,即使它只是显示一个带有巨大调度程序的菜单它。我并不反对这样的流动。一些用例不断出现,需要在其他用例(LookupCustomer,...)的各个点包含,但对于以流程为中心的人一切都是一个流程,即使是事情也是如此。 .. 不流动。
碎片化。 基于流的应用程序倾向于将许多逻辑片段(操作、命令、用于准备视图的代码片段...)分散在整个代码中。映射进出这些动作会增加开销、乏味且使代码膨胀。尽管遵循抽象流程很容易,但实际上弄清楚这些小(或大)代码块中发生了什么是另一回事。虽然每种风格的应用程序都允许人们编写糟糕且不一致的代码,但以流程为中心的应用程序让这变得特别容易。
配置文件。 大多数应用程序使用某种 XML 格式来声明伴随状态变化的流和动作。编写应用程序的语言(比如 Java、C#、Ruby 等)可能比 XML 格式更丰富、更具表现力。何必呢?
Flows break encapsulation.如果你给我一个有一定内嵌流逻辑的组件,那么流应该是组件的一部分,而不应该是外部抽象。换句话说:流是组件的一部分,组件是自包含的。这是一个细节。当然,它可以参数化和填充,但组件应该“正常工作”。编写 Swing、GWT 或任何胖或丰富的接口应用程序的人不会为显式流抽象而烦恼。为什么我的 Web 应用程序应该有一个?给我GMail的流程图。
(编辑)流程是程序化的。如果您查看像 MVC 这样的“丰富”模式,其中包含事件和所有内容,相比之下流程就显得苍白无力。您正在使用现代且富有表现力的语言来实现您的应用程序,对吧?因此,您可以比打孔卡和汇编器流行时那种死板的“做这个,然后那个,那个,然后……”做得更好。
促进以流为中心的开发的框架示例有 Struts、BTT、Spring Webflow 和 JSF。我还遇到过基于普通 servlet 构建的国产流引擎。
这也是一篇有趣的文章:http://chillenious.wordpress.com/2006/07/16/on-page-navigation/
您(仍然)认为对 Web 应用程序(前端)采用以流为中心的方法是个好主意吗?
【问题讨论】:
-
我认为,如果您对“流程”给出更具体的定义,或者至少链接到我们这些没有接触过以流程为中心的设计的人可以感受它的资源,那将会有所帮助。这就是你在说的:en.wikipedia.org/wiki/Flow-based_programming?
-
别看得太远。像 Struts 和 Spring Webflow 这样的东西也符合以流为中心的条件。
-
我认为“流”是指 MVC 框架使用的路由或操作。