現象:上下層文件相互包含
寫代碼時,會不會遇到,業務層內容要在底層硬件程序里寫,
例如:一個外部按鍵,按鍵中斷要觸發一個應用層業務。
業務就要寫道IO中斷里,這個代碼就要用到上層一些函數和變量,
又需要包含上層文件。
一個好的結構應該是樹狀,上層文件包含下層文件,而不是上下層文件相互包含
分層結構的好處
- 解耦上層和下層代碼:
上層文件只需調用下層文件的接口,而不需要下層文件包含上層的頭文件。
這減少了代碼之間的依賴性,使得代碼模塊更加獨立和可復用。
業務邏輯與硬件控制分離:
- 業務層的邏輯在初始化時注入到下層的回調函數中,這意味著業務邏輯的處理是在上層完成的,而下層只負責硬件相關的操作。
這種分離使得硬件中斷和事件處理更加清晰,不會混雜業務邏輯,簡化了調試和維護。
// 上層業務
void MainProcess() {IoInputHandle handle = GetHandle();ExtPowerDropInInit(handle);// 其他業務邏輯
}// 中層設備層
void ExtPowerDropInInit(IoInputHandle p_Handle) {p_ExtPowerDropHandle = p_Handle;ExtPowerDrop_GPIO_Init();NVIC_SetPriority(EXTI9_5_IRQn, 2);NVIC_EnableIRQ(EXTI9_5_IRQn);
}// 下層硬件層
void EXTI9_5_IRQHandler() {if (CheckInterrupt()) {// 調用業務層的回調函數HandlePowerDrop(p_ExtPowerDropHandle);}
}
優點:
-
增強代碼的可維護性:
通過將業務邏輯和硬件控制分離,代碼更加易于理解和維護。
修改業務邏輯時,只需修改上層代碼,不需要涉及下層硬件控制部分。 -
提高代碼的可復用性:
下層代碼獨立于具體的業務邏輯,可以在不同的項目中復用。
上層代碼可以根據不同的需求注入不同的業務邏輯,實現不同的功能。
3.方便測試:
由于業務邏輯和硬件控制分離,可以更容易地進行單元測試。
可以在不依賴硬件的情況下測試業務邏輯,提高測試效率。
總之,這種設計模式使得代碼結構更加清晰、模塊化和可維護,特別適用于大型項目和嵌入式系統開發。