我正在设计机场系统,作为办公室项目的一部分,并且应该设计一个用于处理乘客的舱位。我正在使用WPF MVVM,所以我有 PassengerInfoViewModel ,它基本上代表了前往机场的乘客。我在使用State,Visitor和Decorator模式时感到困惑。
要求:
有几种类型的乘客。乘客可以是拥有SSN +经过验证的生物特征识别信息的***,没有经过验证的SSN +登记特征的SSN +,没有经过验证的生物特征识别信息的SSN +登记过的,经过SSN +没有经过验证的生物特征性特征以及与其他某些实体的其他组合的注册。
上述任何一位乘客都可以具有以下状态之一。新登记,WaitingForVerification,已验证,已拒绝,登机,已取消等。根据机场工作人员执行的某些操作来更新乘客的状态。但这不会在单个事务中更新。下次乘客输入预订参考号时,将更新状态。
乘客可以选择触发特殊工作流程的特殊帮助。乘客可以在单笔交易中选择/取消选中特殊帮助。因此,这些值会在单个事务中保持更新。交易结束后,如果乘客选择了特殊协助,则无法再次更改。
我打算做的是:
创建一个基本的抽象旅客类,该类具有所有旅客共有的基本人口统计信息和其他详细信息。 PassengerWithSSN和PassengerWithoutSSN可以是单独的类,其VerificatonStatus字段为Verified,EnrolledPendingVerification等。将在初始交易开始时获取。
这是对的,还是我应该为每种类型分别设置类(我是这样认为的)。原因是每种类型都会触发不同的工作流程。由于交易期间状态不会改变,因此我不会采用“状态”模式。
此外,将来我应该能够为每种类型插入不同的工作流程。工作流涉及调用单独的API并导航到不同页面。
对于NewEnrollment,WaitingForVerification等,这将被放入PaxStatus中,并且我打算使用Visitor模式来处理此逻辑,从而将其排除在主类之外。不确定这是否是正确的方法。
SpecialAssistance会在交易过程中发生变化,因此我打算在此处使用State设计模式。 SpecialAssistance状态和NormalPassengerState另外,如果父母希望为工作流程注册婴儿,则可能会有一个婴儿状态。
有N * N种组合(例如,具有生物特征识别功能且未经SSN陪同的婴儿旅行且需要特殊帮助的),如果将来出现这种情况,可能需要大量返工设计不当。
有人可以引导我朝正确的方向前进吗?