私の最近のプロジェクトでは、そのプロパティがさまざまなユーザーによって段階的に完了するクラスがありOrder
、各ユーザーは部分的に完了した注文を次のユーザーに参照するため、たとえば、BOM (Bill of Material)が指定されている場合は、生産を計画している場合は、などです。
Order
Status
Order
Status
NewStatus
Status
BOMAttachedStatus
Status
PlannedStatus
また、各ステップでいくつかの検証ルールを に適用する必要があります。たとえば、ユーザーは( ) を作成するときにOrder
顧客名を指定する必要があります。Order
NewState
Order
PlannedStatus
そこで、State Design パターンを使用して状態を管理し、Factory Design パターンを使用して検証をチェックすることにしました。
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();
}
私の場合、この方法は正しいですか?より良い解決策はありますか?