【发布时间】:2009-12-27 20:29:27
【问题描述】:
我是 WF 的初学者,但我读过一本书并进行了很多谷歌搜索。我想写一个库存管理服务。库存由具有以下状态的单个项目组成:
- 备用
- 已安装
- 正在维修中
每个州的物品可能要花费数月时间,并且有成千上万的物品。
问题是,我是否要为所有不同的状态创建状态机工作流?还是我要创建用于在状态之间转换的工作流?
如果我理解正确,如果我创建一个状态机工作流,那么每个项目都会有一个工作流运行。这意味着数以千计的不断运行的工作流程。此外,我需要能够显示每个项目的状态快照,这意味着我必须以某种方式查询所有工作流以了解它们当前所处的状态,或者在每次状态转换后持久保存到数据库。
但是,从逻辑上讲,状态机工作流听起来是正确的做法,因此我进退两难。
如果可以的话请帮帮我:-)
谢谢!
更新:
假设我有比上述 3 个更多的状态,并且并非所有状态转换都是可能的。
赏金奖得主:莫里斯 - 感谢其他所有人真正帮助我更多地了解工作流程、MS 工作流程基础以及其他更轻量级的替代方案。不幸的是,只有一个赏金赢家,莫里斯的回答和它的 cmets 对我帮助最大。
【问题讨论】:
-
我不是工作流向导,但作为一名架构师,我会严重质疑您使用工作流引擎对库存项目状态建模的方法。或者,也许我错过了什么。您将工作流程用于什么目的?
-
工作流的“关键”在于状态之间的转换,我需要验证我的业务逻辑。比如在Spare和Installed之间转换的时候,我需要先确保安装位置是空的,然后我要改变状态,然后我要通知物流关于安装等
-
OK,所以当一个item改变状态时,你需要执行一些业务逻辑。但我仍然不明白你为什么要使用 WF 来做到这一点。无论如何,我假设您将每个项目的当前状态存储在某个数据库中。如果您不这样做并且还有其他充分的理由使用 WF,那么为每个项目设置一个 WF 实例对我来说似乎是更好的选择。但是,如果 WF 的状态转换仅反映项目状态转换,那么您最终只会以复杂的方式存储项目状态(作为持久 WF 实例而不是某些数据库列)。
-
你说的有道理,但是你能想到什么能让这个场景更适合状态机工作流吗? - 此外,使用工作流(状态机或其他)本身是一种很好的做法,它使执行流程更加清晰。由于不使用状态机工作流,一些过程在代码中被掩盖了。这是我困境的一部分。 --- 晚安 TToni :-)
-
我仍然不认为 WF 实例是捕获您的库存项目状态的正确工具。如果您想在 WF 中为项目状态转换捕获重要的逻辑,那很好,但为什么不为每个转换使用不同的 WF,而不是一个包含库存项目状态的大 WF?您仍然可以使用流程模型图来解释您的整体逻辑,但您不必捕获 WF 模型中的所有内容。如果有人遇到像你这样的问题,那么它是 99/100 倍的指标,表明以不适合的方式使用组件。
标签: c# .net workflow workflow-foundation