在我最近的项目中,我有一个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();
}
这种方法对我的情况是否正确?有没有更好的解决方案?