最近的学生考试报名项目中遇到这样一个应用场景。系统要实现考生的报名流程。根据考生的身份证进行多个业务逻辑的校验。1、身份证的合法性;2、系统中是否有该考生的信息;3、该考生是否别调整了考试日期;etc.并且这些业务逻辑有先后关系。
    在实际应用中遇到的问题是不同省份的报名规则不同,业务逻辑流程不同。于是在系统的配置文件中出现了校验规则的开关项,并在代码中用 if(开关项){} else {} 包围住校验逻辑。一个函数的代码往往有上千行,给修改带来了巨大的麻烦。
    用什么方法可以消除这种流程与具体校验方法之间的耦合呢?(因为校验方法之间存在逻辑关系,所以无法使用 Template Method 模式来消除这种耦合)。 
    于是我设计了如下一个模式来处理这种变化: 
    class RegInfo:在流程中的实体类,为流程提供判断条件。
   
设计模式4思考——对于一个简单"流程"的设计思考public class RegInfo
}

    class RegCheck:关键为子类定义了 abstract ExecuteCheck() 接口决定流程的下一步,并让子类来实现。
设计模式4思考——对于一个简单"流程"的设计思考public abstract class RegCheck
}

RegCheckIsLegal:RegCheck:封装了流程中具体的业务逻辑,实现了父类的ExecuteCheck()。自己决定流程的下一步。
设计模式4思考——对于一个简单"流程"的设计思考public class RegCheckIsLegal:RegCheck
}

同上:
设计模式4思考——对于一个简单"流程"的设计思考public class RegCheckIsAdjust:RegCheck
}

RegCheckMgr:流程管理类,它实现了对驱动的驱动。关键是 check() 方法。
设计模式4思考——对于一个简单"流程"的设计思考public class RegCheckMgr
}

客户端:
设计模式4思考——对于一个简单"流程"的设计思考    protected void btn1_Click(object sender, EventArgs e)
    }

这个流程管理模式应该是 state 模式的演变。

相关文章:

  • 2021-12-09
  • 2021-07-24
  • 2022-12-23
  • 2021-09-27
  • 2021-12-21
  • 2021-07-01
  • 2022-02-27
  • 2021-10-04
猜你喜欢
  • 2021-07-14
  • 2021-12-15
  • 2021-05-20
  • 2022-12-23
  • 2021-04-05
  • 2021-09-02
  • 2022-12-23
相关资源
相似解决方案