GoFrame 框架設(shè)計(jì)-隱式與顯式初始化

2022-03-29 15:38 更新

我們知道在程序啟動(dòng)時(shí)會(huì)需要執(zhí)行一些"初始化"的邏輯操作,例如:?Server?配置、各種數(shù)據(jù)庫(?MySQL?、?Redis?、?Kafka?等)配置、業(yè)務(wù)對(duì)象配置等等。絕大多數(shù)場景下,我們有兩種初始化方式:隱式初始化和顯式初始化。

一、隱式初始化

隱式初始化一般通過包初始化方法?init?執(zhí)行初始化。需要注意的是,如果初始化邏輯存在錯(cuò)誤的可能,由于?init?方法的錯(cuò)誤無法被上層捕獲,初始化出錯(cuò)時(shí)往往直接終止程序啟動(dòng)。例如:

image2021-3-10_21-10-8

隱式初始化出錯(cuò)時(shí)往往直接終止程序啟動(dòng)

隱式初始化的好處是不需要手動(dòng)調(diào)用初始化方法,對(duì)于開發(fā)者隱藏了初始化細(xì)節(jié),因此開發(fā)者沒有心智負(fù)擔(dān)。但是缺點(diǎn)也同樣如此,開發(fā)者不知道初始化細(xì)節(jié),一旦出現(xiàn)錯(cuò)誤時(shí),很難快速定位錯(cuò)誤原因。因此使用隱式初始化時(shí),往往要求在初始化出錯(cuò)時(shí)將詳細(xì)的錯(cuò)誤以及堆棧信息打印出來便于錯(cuò)誤定位。

?GoFrame?框架的很多模塊都采用了隱式初始化,隱藏模塊的初始化細(xì)節(jié),減少開發(fā)者的心智負(fù)擔(dān)。例如:

image2021-3-10_21-19-57

?GoFrame?中的模塊普遍存在隱式初始化設(shè)計(jì)

關(guān)于包?init?方法的初始化流程:

image2021-3-22_11-34-33

二、顯式初始化

顯式初始化要求開發(fā)在程序啟動(dòng)時(shí),如在?main?或者?boot?模塊中,調(diào)用特定的方法來執(zhí)行初始化操作。一般來說,基礎(chǔ)組件的初始化往往采用隱式初始化多一些,因?yàn)閷?duì)于使用者來講并不關(guān)心底層基礎(chǔ)模塊的初始化邏輯,而業(yè)務(wù)模塊的初始化大多數(shù)會(huì)采用顯式初始化。例如:

image2021-3-10_21-27-59

在?boot?包中按照順序執(zhí)行顯式初始化

image2021-3-10_21-27-10

在?main?包調(diào)用?boot.Boot()?方法執(zhí)行初始化

三、如何選擇

在業(yè)務(wù)場景下,非特殊必要,我們建議大家采用顯式初始化的方式,以保證更好的可維護(hù)性。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)