在我最近的项目中,我有一个Order
类,其属性将由不同的用户逐步完成,并且每个用户将部分完成的订单引用给下一个用户,所以我假设每个Order
1}}每次都有一个Status
,例如当Order
创建时,Status
将为NewStatus
,当为其指定BOM(物料清单)时,其Status
将为BOMAttachedStatus
,在计划生产时,其Status
将为PlannedStatus
,依此类推。
此外,我需要在Order
的每个步骤中应用一些验证规则,例如,用户必须在创建Order
(NewState
)时指定客户名称,或者用户必须在Order
时设置PlanningDate {1}}正在计划(PlannedStatus
),...
所以,我决定使用州设计模式来管理状态,并使用工厂设计模式来检查验证:
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();
}
这种方法对我的情况是否正确?还有更好的解决方案吗?
答案 0 :(得分:1)
这样可行,但是您的设计存在问题以及您所描述的内容。
我想创建一个StateMachine类,您可以简单地调用Transition方法并提供目标状态。 转换方法从State查询以了解需要验证的规则并调用验证方法。如果成功则改变对象的状态。
这种设计的好处: