總共分成四個層級 (如下圖),依序為
- Model Layer
- Repository Layer
- Service Layer
- Delivery Layer
用於定義資料格式與欄位
用於與資料庫進行存取的封裝方法
用於封裝商業邏輯的方法
用於封裝接口給外部使用者使用的方法
參數以下樹狀圖,可以參考 example
模組進行實作
├── model
│ └── [模組名稱].go
└── module
└── [模組名稱]
├── delivery
│ ├── handler.go
│ └── http
│ ├── http.go
│ └── http_test.go
├── repository
│ ├── repository.go
│ └── repository_test.go
├── repository.go
├── service
│ ├── service.go
│ └── service_test.go
└── service.go
於 model
資料夾中建立與模組名稱相同的檔案,可參照 example
範例
於 repository.go
檔案中建立 interface
後,再由 repository
資料夾中的 repository.go
來進行 implement,可參照 example
範例
於 service.go
檔案中建立 interface
後,再由 service
資料夾中的 service.go
來進行 implement,可參照 example
範例
於 delivery
資料夾的 handler.go
檔案中建立 interface
,名稱規定如下:
- 名稱為
服務 + Handler
,例如Http
的服務則 interface 名稱定義為HttpHandler
;gRPC
的服務則定義為GRPCHandler
,以此類推。
建立 interface
後,再到各服務
的資料夾底下建立服務名稱
的檔案,如Http
的服務則到 http
的資料夾底下建立 http.go
,建立完畢之後實作上一部所建立的 interface
主程式為 main.go
,在主程式中有四個地方需要加入,註解分別為
- 建立 Table Schema (Module)
- 建立 Repository (Module)
- 建立 Service (Module)
- 建立 Handler (Module)
以下分別說明如何加入
透過 orm.DatabaseORM.CheckTable
方法進行資料表初始化,參數說明如下:
- 第一個參數固定為
false
- model 的 instance
orm.DatabaseORM.CheckTable(false, model.Department{})
透過 自定義的 New
方法進行建立 Repository,Repository 基本上都會將 orm
的實例當作參數
demoRepo = repository.NewDemoRepository(orm.DatabaseORM.GetInstance())
透過 自定義的 New
方法進行建立 Service,Service 基本上都會將 repository
的實例當作參數
demoService = service.NewDemoService(demoRepo)
透過 自定義的 New
方法進行建立 Handler,Handler 基本上都會將 gateway
與 自定義的 service
的實例當作參數
_ = NewDemoHandler(gateway, demoService)
目前支援 json
yaml
這兩種格式
設定檔 storage.yaml
database:
url: '127.0.0.1'
port: 3307
name: 'test'
username: 'root'
password: 'a12345'
type: 'mysql'
tablePrefix: ""
maxOpenConns: 1000
maxIdleConns: 1000
maxLifeTime: 5
logMode: true
upgradeFilePath: 'sql/'
version:
version: "1.0.2"
redis:
url: '127.0.0.1'
port: 6379
password: 'a12345'
db: 0
程式讀取
configer.Config.AddCore("storage", configer.NewConfigerCore("yaml", "storage", "./config", "."))
目前支援 json
yaml
這兩種格式
設定檔
- orm.create.success:
other: 建立成功
- orm.create.failed:
other: 建立失敗,原因為 {{.Error}}
- orm.update.success:
other: 更新成功
- orm.update.failed:
other: 更新失敗,原因為 {{.Error}}
- orm.get.success:
other: 取得成功
- orm.get.failed:
other: 取得失敗,原因為 {{.Error}}
使用(於 http.go
裡面實作)
c.JSON(e.StatusSuccess(util.GetI18nData(c).GetMessage("orm.create.success", nil), result))
上述設定完畢後,執行 go run main.go
即可以將 server
進行啟動