在go语言实现类似javaEE分层

举报
码乐 发表于 2025/02/23 10:20:57 2025/02/23
55 0 0
【摘要】 1 简介现代分层架构中MVC 架构是最常见的形式,本文介绍其中包含哪三种元素,它们的作用分别是什么,如何在go语言中应用?如何使用该架构在gin中将 JavaEE 中JSP、Serlet、Senice、JavaBean、DAO 五种构件对应的使用了 2 像javaEE一样使用分层MVC 架构的三种元素及其作用Model(模型)作用:负责处理应用程序的数据逻辑和业务规则。模型直接与数据库交互...

1 简介

现代分层架构中MVC 架构是最常见的形式,本文介绍其中包含哪三种元素,它们的作用分别是什么,如何在go语言中应用?

如何使用该架构在gin中将 JavaEE 中JSP、Serlet、Senice、JavaBean、DAO 五种构件对应的使用了

2 像javaEE一样使用分层

MVC 架构的三种元素及其作用

  • Model(模型)

作用:负责处理应用程序的数据逻辑和业务规则。模型直接与数据库交互,存储、操作和验证数据。
示例:实体类(Java Bean)、数据访问层(DAO)等。

  • View(视图)

作用:负责展示数据和接收用户输入,通常是界面或前端部分。视图从控制器获取数据并呈现给用户。
示例:JSP 页面、HTML、模板引擎(如 Thymeleaf、Freemarker)。

  • Controller(控制器)

作用:负责处理用户请求,将输入数据转交给模型,调用模型逻辑,并将数据返回给视图。
示例:Servlet、Gin 的控制器函数。

3 在 Gin 框架中实现 JavaEE 五种构件的功能对应

  • JSP(视图层) → Gin 的模板渲染

在 JavaEE 中,JSP 负责生成动态 HTML 页面。在 Gin 中,可以使用模板引擎(如 Go 自带 html/template)来渲染视图。

实现:

	router.LoadHTMLGlob("templates/*")
	router.GET("/index", func(c *gin.Context) {
	    c.HTML(http.StatusOK, "index.html", gin.H{
	        "title": "Hello Gin",
	    })
	})
  • Servlet(控制器层) → Gin 的路由处理器

在 JavaEE 中,Servlet 是控制器的一部分,负责接收用户请求并调用相关逻辑。在 Gin 中,路由处理函数 (c *gin.Context) 相当于 Servlet。

实现:

	router.GET("/user/:id", func(c *gin.Context) {
	    id := c.Param("id")
	    c.JSON(http.StatusOK, gin.H{"user_id": id})
	})
  • Service(服务层) → 自定义业务逻辑函数

Service 在 JavaEE 中用来处理具体的业务逻辑,在 Gin 中可以通过封装独立的 Go 函数或模块实现。
实现:

		func GetUserInfo(id string) (map[string]string, error) {
		    // 假设从数据库中获取用户信息
		    return map[string]string{"id": id, "name": "User" + id}, nil
		}

		router.GET("/user/:id", func(c *gin.Context) {
		    id := c.Param("id")
		    user, err := GetUserInfo(id)
		    if err != nil {
		        c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to fetch user info"})
		        return
		    }
		    c.JSON(http.StatusOK, user)
})
  • JavaBean(模型层) → Go 的 Struct 定义

JavaBean 通常用于封装实体数据。在 Gin 中,可以通过定义结构体 (struct) 实现类似功能。
实现:

	type User struct {
	    ID   string `json:"id"`
	    Name string `json:"name"`
	}
  • DAO(数据访问层) → 自定义数据访问模块

DAO 在 JavaEE 中负责与数据库交互,在 Gin 中也可以用独立的模块或函数实现。
实现:

		func FetchUserFromDB(id string) (*User, error) {
		    // 模拟数据库查询
		    return &User{ID: id, Name: "User" + id}, nil
		}

		router.GET("/user/:id", func(c *gin.Context) {
		    id := c.Param("id")
		    user, err := FetchUserFromDB(id)
		    if err != nil {
		        c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to fetch user info"})
		        return
		    }
		    c.JSON(http.StatusOK, user)
		})

4 小结

  JavaEE 组件	  		框架实现			作用
  JSP				模板渲染			渲染 HTML 视图
  Servlet			路由处理函数		处理请求并调用业务逻辑
  Service			业务逻辑函数			处理具体的业务需求
  JavaBean			Struct			封装数据模型
  DAO				数据访问模块		负责与数据库交互

通过这种方式,可以清晰地在 Gin 框架中实现 MVC 架构,同时保留 JavaEE 中的设计思想。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。