谢谢!!!!
我的情况大致如下:
某个商品先要通过后台系统层层审核(大约5,6次),全部一致通过后才能展现在前端的网站上供客户购买,搜索。每次的审核人都不同,只要某次审核未通过就不再送往下一级审核,商品必须修改正确后继续审核。错误历史需记录以供管理层人员查看。现在陷入了数据库设计的困境,状态字段大概设计了10几个,这样是否合理?有没有对于这种情况有一种更适合的方案?请大家多多帮忙啊
这要看情况了。如果采用工作流引擎来处理这个需求,你就不必关心数据库和持久化具体实现的事情了。但前提是你的把这个工作流引擎搞定。
如果整个系统中就这么一处工作流需求,你还是直接用数据库解决吧。但我想,10几个状态字段来表达流程节点是要把脑子搞糊涂的。写程序得相当清醒,还要考虑程序的可读性和可修改性。否则别人没法接手。而且客户需求变更了,你自己改起来都非常头疼。我可以想象如果你的程序中必然会包含一大堆if-else的嵌套。尽量尽量避免过多的if-else。你可以参考一下banq关于“告别if-else”的文章。 具体的url忘了,请让banq帖出来一下。
再有就是文档,如果你用数据库来实现,一定一定要在此处写详细的文档来描述每个细节。代码中也要加必要的注释。
同样,你只要设计好你的状态模式,然后考虑在什么步骤选择“save as”,至于持久化后的字段是哪些,完全取决于你的状态对象是如何设计的,状态对象有什么字段,就保存成什么字段,这和文档保存是同样道理。
我们的精力是放在如何设计“文档内容”,也就是状态对象,而不是放在设计硬盘上文档格式。
至于如何设计状态模式,首先你要整理你的需求状态图,使用UML画一下你的状态图就可以。
再次重申,状态不一定都要持久,或者说保存成数据库,就象你编辑文档时,不是敲入一个字,就保存一次(我想没有人这么做),可是搞企业开发有这样做的思维的人很多,包括楼主(抱歉,第一次发帖就批评你)。