状态管理,项目管理,过程管理,步骤管理,规则管理的一些看法[1]
为什么要有状态管理器呢?
我碰到一个问题,作一个项目管理的控制程序。
项目管理里面有很多项目记录。
同时,每一个项目都有各自的状态和下一步的动作。
而且,每一个动作后的影响都不一样。
即工作流程的定义是不一样的。
来看看,流程里面有什么?
阶段(procedure)-每一个阶段定义了工作的不同部分
状态(status)-标识着工作正处于哪个阶段
事件(event)-当一个阶段到另外一个阶段的时候,触发什么事件
规则(rule) -它用指导当一个阶段完成后,根据不同的状态来进行下一步动作
实际上,阶段里面还分为很多小的步骤(step),每一个step也有自己的状态和规则
那么阶段的集合可以看成一个大的项目(project)
抽象一下,
project
procedure
step
有很多相同的地方。所以我抽象了一个类Item.
project和procedure是可以作容器的,而step为最小单位不能作容器。
public abstract class Item
{
protected String _itemID;
protected String _name;
protected Status _status;
protected DateTime _startTime;
protected DateTime _endTime;
protected DateTime _actualstartTime;
protected DateTime _actualendTime;
protected bool _isContainer;
protected ArrayList _items;
public bool IsContainer
{
get{return _isContainer;}
}
public Item()
{
_items = new ArrayList();
}
public String GetID()
{
return _itemID;
}
public String GetName()
{
return _name;
}
public DateTime StartTime
{
get{ return _startTime;}
}
public DateTime EndTime
{
get{ return _endTime;}
}
public DateTime ActualstartTime
{
get{ return _actualstartTime;}
}
public DateTime ActualendTime
{
get{ return _actualendTime;}
}

public virtual void Add(object o)
{
if(!_isContainer)
throw new System.Exception("Couldn't Contain any other itmes!");
_items.Add(o);
}
public virtual void Remove(object o)
{
if(!_isContainer)
throw new System.Exception("Couldn't Contain any other itmes!");
_items.Remove(o);
}
public virtual void InsertAt(int idx,Item item)
{
if(!_isContainer)
throw new System.Exception("Couldn't Contain any other itmes!");
if((idx<0)||(idx>_items.Count))
throw new System.Exception("InsertAt parametre idx is invaledate!");
ArrayList p = new ArrayList();
int count = _items.Count;
for(int i =idx;i<count;i++)
{
p.Add(_items[idx+1]);
_items.RemoveAt(idx+1);

}
_items.Add(item);
for(int i=0;i<p.Count;i++)
{
_items.Add(p[i]);
}
}
public virtual void Update(Item olde,Item newitem)
{
}
public virtual void SaveItems(Item item)
{
if(saveEvent!=null)
saveEvent(this,item);
}
public delegate void SaveEventHandler(object o,Item item);
public event SaveEventHandler saveEvent;


}

浙公网安备 33010602011771号