状态管理,项目管理,过程管理,步骤管理,规则管理的一些看法[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;



    }

 

 


 

posted on 2004-09-15 22:55  一望无际的南  阅读(829)  评论(0)    收藏  举报

导航