多後端系統的模組劃分方案

系熔發表於2020-12-05

問題

例:我要做一個多後端2d圖形庫,後端有vulkan,opengl、directx等,那麼這個圖形庫如何劃分模組?

 

方案一:不劃分模組

不劃分模組,所有東西統統塞進一個模組裡

優點

  1. 直接秒殺一切模組劃分問題,哪管那麼多的瑣碎破事
  2. 瑞士軍刀

 

缺點

  1. 使用時,模組含有過多冗餘功能,導致強迫症不適

 

適用範圍

  1. 適用於輕量級系統,輕到覺得劃分模組很傻x的那種系統
  2. 適用於懶得劃分模組的專案

 

方案二:Core、Share、Impl三層模組

Core模組:排程中樞

Core模組引用Share模組和所有的Impl模組,實現了對各類Impl的集中統一管理,是整個系統的面向使用者的排程中樞,使用者通過安裝Core模組便可立即使用類庫

Share模組:公用介面

Share模組作為各類Impl都要使用的內容,一般盛放公用介面等內容

Impl模組:詳細實現

Impl模組是各種功能的分離實現,一個系統含有多個Impl模組,每一個Impl模組實現一種後端

 

優點

  1. 精準劃分,強迫症十分舒適

 

缺點

  1. 模組多,不便於管理

 

適用範圍

  1. 適用於重量級系統,重到覺得不劃分模組很傻x的那種系統
  2. 適用於“分許多模組能帶來快感”的群體

 

Share模組和Core模組功能類似,為什麼不把他倆合併呢?

Share模組包含Impl模組的公用介面,Impl引用Share模組

Core模組是所有實現的排程中心,引用所有Impl模組

如果Share模組和Core模組合併,那麼Core引用Impl,Impl又引用Share,Share和Core還是一個東西,就會造成迴圈引用。編譯Core的時候就會去先編譯Impl,編譯Impl又需要編譯完Core做前提,無限迴圈,導致專案無法正常編譯

 

相關文章