系统的自我运作or外部驱动
2019-12-14 本文已影响0人
Woodlouse
需求
需要做一个系统:在特定的时间点依次运行几件“在某些特定条件方可触发”的事情,譬如A、B、C三件事情。这三件事是否满足执行条件由A、B、C自己判断,如何设计这个系统呢?
自我驱动实现
启动系统,依次检测/设定A、B、C三件事是否可以触发,然后运行系统,依次执行满足触发条件的事情A、B、C。
外部驱动实现
启动系统,A事件通知系统A事件是否满足运行条件,然后B、C(顺序不重要,也可以是BAC、CBA....这样的顺序),每次接到一个事件通知后需要检测是否所有的事件状态设置完毕,如果设置完毕即可启动运行系统。
自我or外部
自我驱动的好处:
- 内聚:由系统访问事件,所有事件状态的设定操作都控制系统内部进行;
- 易扩展:在添加新的事件D后,由事件D提供访问事件D的接口给系统,系统在检测事件运行态的处理处进行访问,设置即可;
- 自知:系统可以以一个循环操作依次设定各个事件的运行态,可以知道何时设置完毕,运行系统;
自我驱动的局限性:
自我驱动的局限性在于:只有所有事件的可运行性自检完毕后才可以由系统来访问;
外部驱动的好处:
自我驱动的局限性也就是外部驱动的好处,系统提供接口给事件进行访问,系统自检是否所有的事件设置完毕,只有所有的事件设置完毕后方启动运行;
外部驱动的局限性:
相对于自我驱动方式的主要局限性是:分散,由事件访问系统的接口,每个事件都会进行调用,导致系统提供的接口遍布各处;
如何选择
个人观点:在整个体系的维护中接口的定义不重要,重要的是调用、使用。当一个接口的调用遍布整个体系时此接口的维护就很困难了,基于此观点,个人推荐使用“自我驱动”的方式。