diff --git a/homework/README.md b/homework/README.md index f15f2cc..903fbc3 100644 --- a/homework/README.md +++ b/homework/README.md @@ -8,13 +8,14 @@ Web全栈开发(Book Api): 必须完成 学号-名 - 17007-杨熊猫 [vblog](https://gitlab.com/yangli350/vblogv2) -- 17031-尹 [book](https://gitlab.com/unmask429/vblog) + - GO17024-mushroom [vblog](https://gitlab.com/go3751246/vblog) - GO17030-浩 [vblog](https://gitee.com/lihaostudy/vblog) - Go17005-健蛟 [vblog](https://gitlab.com/xyp-gif/vblog) - GO17042-志勇 [vblog](https://gitlab.com/laizhiyo/vblog.git) - GO17027-wangtao [vblog](https://gitlab.com/wangtao4/go/vblog) +- 17031-尹 [book](https://gitlab.com/unmask429/vblog) - GO17009-豪豪 [vblog](https://gitlab.com/wangjunhaohenshuai/vlog/-/tree/main/%E4%BD%9C%E4%B8%9A?ref_type=heads) - GO17023-靖宇 [vblog](https://gitee.com/ballooncode/vblog) - 17015-小秦 [vblog](https://gitlab.com/Kevin-qwx/vblog) diff --git a/vblog/README.md b/vblog/README.md index 0d7b90e..35f919f 100644 --- a/vblog/README.md +++ b/vblog/README.md @@ -311,6 +311,11 @@ curl --location 'http://127.0.0.1:8080/vblog/api/v1/tokens' \ 开发一个认证中间件: 用于根据用户携带的Token信息,判断用户身份,并把用户身份信息方到上下文中,传递给后面HandleFunc中使用 -### ioc优化 +## ioc优化 + ++ 会用: mcube ioc / golang-ioc ++ 掌握原理: 自己造,手写一个简单 + +### 问题 diff --git a/vblog/apps/blog/api/api.go b/vblog/apps/blog/api/api.go index d260893..6c6a8db 100644 --- a/vblog/apps/blog/api/api.go +++ b/vblog/apps/blog/api/api.go @@ -4,13 +4,15 @@ import ( "github.com/gin-gonic/gin" "github.com/infraboard/mcube/v2/http/gin/response" "gitlab.com/go-course-project/go17/vblog/apps/blog" - "gitlab.com/go-course-project/go17/vblog/apps/blog/impl" "gitlab.com/go-course-project/go17/vblog/middleware" ) -func NewBlogApiHandler() *BlogApiHandler { +// 上传怎么用: +// main.go 组装的时候,传入具体实现, 实现了业务的 插件化 +// 访问我们mock测试, 有助于构造 小规模的单元环境 +func NewBlogApiHandler(blogImpl blog.Service) *BlogApiHandler { return &BlogApiHandler{ - blog: impl.BlogService, + blog: blogImpl, } } diff --git a/vblog/apps/token/api/api.go b/vblog/apps/token/api/api.go index 670a340..a282d78 100644 --- a/vblog/apps/token/api/api.go +++ b/vblog/apps/token/api/api.go @@ -4,12 +4,11 @@ import ( "github.com/gin-gonic/gin" "github.com/infraboard/mcube/v2/http/gin/response" "gitlab.com/go-course-project/go17/vblog/apps/token" - "gitlab.com/go-course-project/go17/vblog/apps/token/impl" ) -func NewTokenApiHandler() *TokenApiHandler { +func NewTokenApiHandler(tokenImpl token.UserService) *TokenApiHandler { return &TokenApiHandler{ - token: impl.TokenService, + token: tokenImpl, } } diff --git a/vblog/apps/token/impl/impl.go b/vblog/apps/token/impl/impl.go index 97ceea2..f00efa7 100644 --- a/vblog/apps/token/impl/impl.go +++ b/vblog/apps/token/impl/impl.go @@ -15,6 +15,12 @@ var TokenService token.Service = &TokenServiceImpl{ user: impl.UserService, } +func NewTokenService(user user.AdminService) token.Service { + return &TokenServiceImpl{ + user: impl.UserService, + } +} + // 定义一个struct, 用于实现 UserService就是刚才定义的接口 // 怎么才能判断这个结构体没有实现这个接口 type TokenServiceImpl struct { diff --git a/vblog/docs/oop.drawio b/vblog/docs/oop.drawio new file mode 100644 index 0000000..a0bce1a --- /dev/null +++ b/vblog/docs/oop.drawio @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vblog/main.go b/vblog/main.go index 990e04b..e60dd61 100644 --- a/vblog/main.go +++ b/vblog/main.go @@ -3,10 +3,14 @@ package main import ( "log" + blogApi "gitlab.com/go-course-project/go17/vblog/apps/blog/api" + blogImpl "gitlab.com/go-course-project/go17/vblog/apps/blog/impl" + tokenApi "gitlab.com/go-course-project/go17/vblog/apps/token/api" + tokenImpl "gitlab.com/go-course-project/go17/vblog/apps/token/impl" + userImpl "gitlab.com/go-course-project/go17/vblog/apps/user/impl" + "github.com/gin-gonic/gin" "github.com/infraboard/mcube/v2/ioc/config/http" - blogApi "gitlab.com/go-course-project/go17/vblog/apps/blog/api" - tokenApi "gitlab.com/go-course-project/go17/vblog/apps/token/api" "gitlab.com/go-course-project/go17/vblog/config" ) @@ -17,8 +21,10 @@ func main() { server := gin.Default() // 注册业务模块的路有 - tokenApi.NewTokenApiHandler().Registry(server) - blogApi.NewBlogApiHandler().Registry(server) + tokenApi.NewTokenApiHandler(tokenImpl.NewTokenService(&userImpl.UserServiceImpl{})).Registry(server) + blogApi.NewBlogApiHandler(&blogImpl.BlogServiceImpl{}).Registry(server) + // ... 50 个API + // // 服务器启动 if err := server.Run(http.Get().Addr()); err != nil { diff --git a/vblog/middleware/auth.go b/vblog/middleware/auth.go index ac24e29..1f7862d 100644 --- a/vblog/middleware/auth.go +++ b/vblog/middleware/auth.go @@ -10,6 +10,7 @@ import ( "github.com/infraboard/mcube/v2/http/gin/response" "gitlab.com/go-course-project/go17/vblog/apps/token" "gitlab.com/go-course-project/go17/vblog/apps/token/impl" + userImpl "gitlab.com/go-course-project/go17/vblog/apps/user/impl" ) // // HandlerFunc defines the handler used by gin middleware as return value. @@ -29,7 +30,7 @@ func Auth(c *gin.Context) { accessToken = tkList[1] } // 2. 校验Token - tk, err := impl.TokenService.ValidateToken(c.Request.Context(), token.NewValidateTokenRequest(accessToken)) + tk, err := impl.NewTokenService(&userImpl.UserServiceImpl{}).ValidateToken(c.Request.Context(), token.NewValidateTokenRequest(accessToken)) if err != nil { response.Failed(c, exception.NewUnauthorized("令牌校验失败: %s", err)) c.Abort()