我有一个包含许多页面的复杂应用程序。
每个页面可以有许多可能的路由到其他页面:'A'可以去'B'或'C','B'可以去'A'但不能去'C'。等等
而不是在每个页面中嵌入这个“下一个去哪里”逻辑(可怕!)我当然希望将它封装在一个主要控制点中。“A”不需要知道“B”或“C”。
更好的是,我想将问题简化为配置问题。
这不是特定于语言/框架的问题——它是如何最好(简单、实用)表示和解释工作流逻辑的问题。
有没有人有将应用程序中点之间的复杂流程表示为可配置设置的经验?
我有一个包含许多页面的复杂应用程序。
每个页面可以有许多可能的路由到其他页面:'A'可以去'B'或'C','B'可以去'A'但不能去'C'。等等
而不是在每个页面中嵌入这个“下一个去哪里”逻辑(可怕!)我当然希望将它封装在一个主要控制点中。“A”不需要知道“B”或“C”。
更好的是,我想将问题简化为配置问题。
这不是特定于语言/框架的问题——它是如何最好(简单、实用)表示和解释工作流逻辑的问题。
有没有人有将应用程序中点之间的复杂流程表示为可配置设置的经验?
你描述的是一个非常经典的有限状态机。你有状态(页面)、导航(转换),但你也可以有进入/退出动作和转换条件之类的东西。
话虽如此,值得考虑您的导航,您只是想要动态添加到页面的导航选项列表,还是涉及一些额外的智能。考虑一下导航何时有效,导航需要哪些信息,您可能希望在下一次导航中携带哪些数据等。
我之前通过简单地使用 XML 创建了状态图,例如:
<states>
<state name="Open">
<transition action="Close" state="Closed" />
</state>
<state name="Closed">
<transition action="Open" state="Open" />
<transition action="Lock" state="Locked" />
</state>
<state name="Locked">
<transition action="Unlock" state="Closed" />
</state>
</states>
您也许可以使用类似 .NET 工作流基础之类的东西来巧妙地表示这一点。
这基本上是一个状态机,其中每个页面代表一个状态,并且转换存储在您的配置中。谷歌,你会得到可能有帮助的样本。
几乎每个 Web 应用程序框架都必须解决这个问题。对于 java,看看 Struts2、Spring MVC、Tapestry、Wicket 等,看看各种方法。(XML 自然是在外部配置文件中捕获转换信息的常用方法。)
Press On在一定程度上涵盖了这类事情。(在用户界面的设计和实现中使用状态机和状态图的显式表示。)