在我最近的项目中,我有一个Order类,它的属性将由不同的用户逐步完成,每个用户将部分完成的订单提交给下一个用户,所以我假设每个人每次Order都有一个Status,例如当一个Order创建时,其Status将是NewStatus,当为其指定 BOM(物料清单)时,其Status将是BOMAttachedStatus,当它计划生产时,其Status将是PlannedStatus,等等。

我还需要在每个步骤中应用一些验证规则Order,例如用户必须在创建Order( NewState) 时指定客户名称,或者用户必须在Order计划 ( PlannedStatus) 时设置 PlanningDate,...
所以,我决定使用状态设计模式来管理状态,并使用工厂设计模式来检查验证:

public static class StatusFactory
{
static public IStatus CreateOrderStatus(Order order)
{
//check statuses from last to first
if (order.PlanningDate != null)
return new PlannedStatus();
....
if(order.CustomerName != string.Empty)
return new OrderItemNewState();
}
}
当我想保存我的currentOrder,我打电话StateFactory.CreateOrderStatus(currentOrder)来设置它Status:
public void Save(Order order)
{
order.Status = StatusFactory.CreateOrderStatus(order);
UnitOfWork.SaveChanges();
}
这种方法对我的情况是否正确?有没有更好的解决方案?