问题场景描述:
有一个表单,有新增、修改、空白等几个“单据状态”,执行Toolbar上的对应按钮(比如[修改]按钮)以后,单据进入对应的单据状态,状态变为某个状态时,要执行关联的事件(或者叫动作)。
表单的状态个数不固定、二次开发可扩展该状态。目标:(C#实现)
希望抽象出一套独立的“状态机”类库,该状态机不同于工作流中的那种状态机,支持根据配置文件状态管理和状态切换时的通用事件调用机制等...问题:
不知道目前.NET平台上是否有成熟的解决方案或者开源的类库实现。或者有过相关经营者请提供一些设计思路,大家一起头脑风暴一下~~~
这是个讨论帖,先放50分 :)
有一个表单,有新增、修改、空白等几个“单据状态”,执行Toolbar上的对应按钮(比如[修改]按钮)以后,单据进入对应的单据状态,状态变为某个状态时,要执行关联的事件(或者叫动作)。
表单的状态个数不固定、二次开发可扩展该状态。目标:(C#实现)
希望抽象出一套独立的“状态机”类库,该状态机不同于工作流中的那种状态机,支持根据配置文件状态管理和状态切换时的通用事件调用机制等...问题:
不知道目前.NET平台上是否有成熟的解决方案或者开源的类库实现。或者有过相关经营者请提供一些设计思路,大家一起头脑风暴一下~~~
这是个讨论帖,先放50分 :)
http://www.codeproject.com/KB/tips/AbstractFSM.aspx看看这个,我想要做的跟这个类似,但是应该比这个要复杂些
2.楼主描述的并不是"单据业务"的状态机,而是分解后的行为描述,
你点击"新建"按钮,也就是触发"添加单据"这个行为的视图呈现
比如,SaleOrder,界面的目标区域是pnl_1
Method MethdSave{get;set;}
btnAddNew_Click(object sender, EventArgs e){
this.Createview(ModelDrv.MethodDrv.GetMethod("SaleOrderInsert"));
}
btnEdit_Click(object sender, EventArgs e){
this.Createview(ModelDrv.MethodDrv.GetMethod("SaleOrderUpdate"));
}
btnSave_Click(object sender, EventArgs e){
//用当前视图更新Model
ViewDrv.MethodDrv.UpdateModel(this,this.MethodSave);
//调用数据访问层
DAHelper.ExecuteMethod(this.MethodSave);
}
void CreateView(Method pMethod){
this.MethodSave= pMethod
//向目标区域渲染该方法的视图,呈现给用户
pnl_1.Controls.Clear();
pnl_1.Controls.Add(ViewDrv.MethodDrv.CreateView(this.MethodSave));
}
这个小例子省略了UpdateView的代码
你的答复有点儿接近,但不完全是我想要的。
单据内容和项目的处理称为:单据登记业务,
AddNew,Edit,是不同的处理,他们有自己独立的"输入视图"(我们叫做ParamView),
点击相应的按钮,就重绘目标区域的界面,
点击保存或者放弃,就用单据查询方法的输出视图(我们叫做DataKeyView)再次重绘界面,
而对于没有返回任何行的数据集,自然是用空白或者默认值填充的
单据审核属于单据业务流程业务,单据从一种状态迁越到另一种状态
你结合10楼的那张图,看一下,那里面定义了哪种状态是可以修改单据,哪种状态可以打印,你甚至还可以约定:允许导出,允许浏览
但是定义本身并不会涉及任何界面的东西