简化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的实例。

0
0

全流程开发 GO实战电商网站高并发秒杀系统

运用架构设计与系统化思维,从容应对不同流量等级的“秒杀”场景

1483 学习 · 443 问题

查看课程