什么是時序耦合
在兩個或更多的類型、成員之間,必須先調用一個才能調用另一個。這種必須按照特定順序調用的耦合關系叫做時序耦合。
哪些情況會遇到時序耦合
- 讀取json、excel等數據時,必須先調用
Initialize
這類的函數。 - Lua文件中的全局Helper類,在業務邏輯中使用需要顯示的調用
Require
后才能使用。 - 使用各種Manager時,需要手動再次確認是否進行了初始化。
以上的示例,都是一種"design smell",需要我們十分注意。
時序耦合的危害
- 造成學習成本的提高,在使用時需要各種注意事項。
- 修改變得困難,這種順序上的耦合可能會將本應該無關的類型綁定在一起,對其中的一個修改會造成另一個使用的bug。
- 這種時序耦合常常會造成偶現bug,而偶現bug一般是非常難以定位。
減少時序耦合的手段
- 【宏觀】分層,同層調用達到無時序耦合。
- 【微觀】使用構造注入和函數注入來避免時序耦合。詳見:注入的三種方式