简化controller注册代码
来源:6-9 【勤于思考,夯实学习成果】阶段练习题
屠虫少年
2022-03-05
controllers包增加如下代码
// controllers.go
package controllers
import (
"database/sql"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/mvc"
)
type IController interface { // 每个controller都要实现此接口
Init(*sql.DB)
GetPartyName() string
}
func Init(app *iris.Application, db *sql.DB) {
cs := []IController{
new(ProductController),
new(OrderController),
// 新增其他controller后在这里增加一行new(controller)即可
}
for _, c := range cs {
c.Init(db)
mvc.New(app.Party(c.GetPartyName())).Handle(c)
}
}main.go中将注册控制器的代码改为调用上面的Init函数即可。
controllers.Init(app, db)
ProductController实现IController接口:
func (p *ProductController) Init(db *sql.DB) {
p.ProductService = services.NewProductService(repositories.NewProductManager("product", db))
}
func (p *ProductController) GetPartyName() string {
return "/product"
}PS:这种方式目前的缺点是所有的controller都只能使用同一个db,当有的controller需要使用其他的db的时候不够灵活。
写回答
1回答
-
Cap
2022-03-22
多db的的场景下可以使用 gorm进行控制,也可以自己开多个db的实例。
00
相似问题