刚学了设计模式,想在实际项目里应用一下,是一个项目管理的审批流程,业务对象是project
使用spring框架,请问如何解决不同项目对象的状态上下文Context的保存问题?我设想的每个项目应该是独立的流程,这个状态还是能够被持久化的
在head first 设计模式的书里我发现了解答,但是没看懂,说是多实例之间可以共享状态对象,但不能持有他们自己的内部状态,需要把每个状态都指定到静态的实例变量中。如果你的状态需要利用到Context中的方法或者变量实例,你还必须在每个handle方法内传入一个context的引用。
我目前的解决方案是这样的,给context对象增加一个带参数的构造方法,传入一个porject对象的引用,project对象中的有个status字段标记状态,根据switch来切换context的当前state。而状态模式只负责改变这个状态字段,每个handle方法也接受project,返回也返回project,在handle方法内部,改变project的这个字段,持久化的时候保存project对象。
其中有个坑是是保存project对象这个方法,我之前想把service写在handle里,但是发现注入为null,想起来初始化的时候是new的context,脱离了spring生命周期,然后就把构造方法都删了,全部换成注解注入。但是这时候context里保存当前状态的state就不知道如何注入了。最后我又全改成了书上构造器创建对象的方法。