【发布时间】:2023-03-22 00:15:02
【问题描述】:
在我最近的项目中,我有一个 Order 类,它的属性将由不同的用户逐步完成,每个用户将部分完成的订单提交给下一个用户,所以我假设每个 Order 都有每次一个Status,例如当一个Order创建时,它的Status将是NewStatus,当为它指定BOM(Bill of material)时,它的Status将是BOMAttachedStatus,当它计划生产其Status 将是PlannedStatus,依此类推。
我还需要在每个步骤中对Order 应用一些验证规则,例如用户必须在创建Order(NewState) 时指定客户名称,或者当Order 正在计划时用户必须设置 PlanningDate(@ 987654337@), ...
所以,我决定使用 State Design Pattern 来管理状态,并使用 Factory Design Pattern 来检查验证:
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();
}
这种方法对我的情况是否正确?有没有更好的解决方案?
【问题讨论】:
标签: c# validation state-pattern static-factory