读书人

关于轻量级的状态机设计跟实现

发布时间: 2013-10-15 16:47:37 作者: rapoo

关于轻量级的状态机设计和实现
问题场景描述:
有一个表单,有新增、修改、空白等几个“单据状态”,执行Toolbar上的对应按钮(比如[修改]按钮)以后,单据进入对应的单据状态,状态变为某个状态时,要执行关联的事件(或者叫动作)。
表单的状态个数不固定、二次开发可扩展该状态。

目标:(C#实现)
希望抽象出一套独立的“状态机”类库,该状态机不同于工作流中的那种状态机,支持根据配置文件状态管理和状态切换时的通用事件调用机制等...

问题:
不知道目前.NET平台上是否有成熟的解决方案或者开源的类库实现。或者有过相关经营者请提供一些设计思路,大家一起头脑风暴一下~~~


这是个讨论帖,先放50分 :)
[解决办法]
1.楼主的思路就是很好的面向对象设计思路,
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的代码

读书人网 >C#

热点推荐