golang 項目目錄組織

app
  - cmd
    - cmd1
    - cmd2
  - cron
  - env
  - conf
    - conf_test.xxx
    - conf_prod.xxx
  - domain
  - facade
  - transport
    - http
    - grpc

domain就是各種業(yè)務(wù)邏輯
facade:facade模式,不同domain可能以組合模式對外提供服務(wù),就在這層
transport:http服務(wù)還是grpc服務(wù)
=====
實踐
=====
基于六邊形架構(gòu),面向接口編程,所有的依賴和提供的服務(wù)都以接口形式提供,domain盡可能的pure,便于測試.
舉個簡單的例子:
訂單系統(tǒng):
創(chuàng)建訂單服務(wù):

Order.New
    // 創(chuàng)建訂單
    // 持久化
    // 發(fā)送訂單創(chuàng)新消息

持久化和發(fā)送消息可以用接口來處理,這樣測試的時候,就可以通過mock這兩個系統(tǒng),而不用需要引入第三方組件,例如mysql,kafka等

對于domain,盡可能依照solid原則,最最最基本的是要滿足s,單一原則,便于維護(hù)、分工等
而facade層,一種是先在router中快速實現(xiàn),單發(fā)現(xiàn)有多個router都要用到同一組服務(wù)的時候,可以抽出一個公共的服務(wù),放入facade層

參考
adapters-architecture
ddd上下文

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容