什么是时序耦合
在两个或更多的类型、成员之间,必须先调用一个才能调用另一个。这种必须按照特定顺序调用的耦合关系叫做时序耦合。
哪些情况会遇到时序耦合
- 读取json、excel等数据时,必须先调用
Initialize
这类的函数。 - Lua文件中的全局Helper类,在业务逻辑中使用需要显示的调用
Require
后才能使用。 - 使用各种Manager时,需要手动再次确认是否进行了初始化。
以上的示例,都是一种"design smell",需要我们十分注意。
时序耦合的危害
- 造成学习成本的提高,在使用时需要各种注意事项。
- 修改变得困难,这种顺序上的耦合可能会将本应该无关的类型绑定在一起,对其中的一个修改会造成另一个使用的bug。
- 这种时序耦合常常会造成偶现bug,而偶现bug一般是非常难以定位。
减少时序耦合的手段
- 【宏观】分层,同层调用达到无时序耦合。
- 【微观】使用构造注入和函数注入来避免时序耦合。详见:注入的三种方式