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層