web框架常见组件介绍

举报
码乐 发表于 2025/03/01 10:21:32 2025/03/01
38 0 0
【摘要】 1 简介在Go语言中流行的Web框架的 MVC 架构中,常用的组件主要包括: Controller(控制器) Service(服务层,业务逻辑) Model(数据模型层) Middleware(中间件) Router(路由) Context(上下文对象) Dependency(依赖,比如数据库连接池、缓存等)下面对这些组件从几个方面进行深入分析,并判断它们是否是有状态的组件。...

1 简介

在Go语言中流行的Web框架的 MVC 架构中,常用的组件主要包括:

  Controller(控制器)
  Service(服务层,业务逻辑)
  Model(数据模型层)
  Middleware(中间件)
  Router(路由)
  Context(上下文对象)
  Dependency(依赖,比如数据库连接池、缓存等)

下面对这些组件从几个方面进行深入分析,并判断它们是否是有状态的组件。

2. Controller(控制器)

控制器负责接收 HTTP 请求,调用业务逻辑,并返回响应。

		场景  			状态 				              是否有状态

  1. 跨请求状态    不保存跨请求状态,通常是无状态的     			无
  2. 外部持久存储   不直接依赖,通常通过 Service 访问持久存储   无
  3. 内存状态 		不会在内存中维护状态  						无
  4. 外部输入 		直接依赖外部 HTTP 请求数据    				有
  5. 初始化/销毁   无需显式初始化 								无
  6. 上下文依赖    依赖 gin.Context 传递请求信息   			  有
  7. 影响后续操作   只负责当前请求处理,通常不影响后续请求 		无

3. Service(服务层)

Service 负责业务逻辑封装,通常与数据库、缓存等进行交互。

		场景  			状态 				              	是否有状态

    1. 跨请求状态    通常是无状态的,但可能维护特定缓存实例 	无/某些场景有
    2. 外部持久存储   通过 Repository(DAO)访问持久存储     	有
    3. 内存状态 		可能缓存中间数据(如本地缓存) 		 	有
    4. 外部输入 		通过参数接收控制器传递的数据  				有
    5. 初始化/销毁   需要显式初始化(如数据库连接)					有
    6. 上下文依赖    可能需要传递 gin.Context 处理事务 			有
    7. 影响后续操作   会影响数据的持久化,可能影响后续请求结果    有
    3. Model(数据模型层)

Model 主要表示数据库实体,通常与 ORM(如 GORM)结合使用。

场景 状态 是否有状态

  1. 跨请求状态 仅表示数据结构,不保存跨请求状态 无
  2. 外部持久存储 直接映射数据库表 有
  3. 内存状态 只在单个请求中存储数据 无
  4. 外部输入 通过 Service 或 Controller 传入数据 有
  5. 初始化/销毁 不需要显式初始化 无
  6. 上下文依赖 通常无直接上下文依赖 无
  7. 影响后续操作 通过数据库持久化影响后续查询 有

4. Middleware(中间件)

Middleware 用于处理公共逻辑(如日志、鉴权、跨域)。

场景 状态 是否有状态

  1. 跨请求状态 通常无状态,但可以通过配置保存特定全局数据 无/某些场景有
  2. 外部持久存储 通常不直接依赖 无
  3. 内存状态 可通过全局变量保存特定状态 有
  4. 外部输入 依赖 HTTP 请求 有
  5. 初始化/销毁 需要显式注册 有
  6. 上下文依赖 依赖 gin.Context 进行数据传递 有
  7. 影响后续操作 可以拦截请求并中断或修改响应 有

5. Router(路由)

Router 负责请求的分发和路径映射。

场景 状态 是否有状态

  1. 跨请求状态 只在程序启动时初始化 无
  2. 外部持久存储 不依赖 无
  3. 内存状态 仅保存路由映射关系 有
  4. 外部输入 通过 HTTP 请求路径匹配 有
  5. 初始化/销毁 需要显式初始化 有
  6. 上下文依赖 通过 gin.Context 传递 有
  7. 影响后续操作 影响请求的路由分发 有

6. Context(上下文对象)

gin.Context 是请求的核心对象,贯穿整个请求生命周期。

场景 状态 是否有状态

  1. 跨请求状态 每个请求独立创建 无
  2. 外部持久存储 不直接依赖 无
  3. 内存状态 维护当前请求的所有数据 有
  4. 外部输入 直接绑定 HTTP 请求数据 有
  5. 初始化/销毁 由 Gin 框架自动创建和销毁 无
  6. 上下文依赖 是核心的上下文对象 有
  7. 影响后续操作 通过传递数据影响后续处理 有

7. Dependency(依赖)

比如数据库连接池、缓存客户端。

场景 状态 是否有状态

  1. 跨请求状态 连接池等资源是全局共享的 有
  2. 外部持久存储 直接依赖数据库或缓存服务 有
  3. 内存状态 维护连接池或缓存实例 有
  4. 外部输入 通过配置初始化 有
  5. 初始化/销毁 需要显式初始化和关闭 有
  6. 上下文依赖 可通过 gin.Context 传递 有
  7. 影响后续操作 影响数据存储和缓存命中率 有

8 小结

    组件  		是否有状态   		影响范围
    Controller  	无   				单请求
    Service 		有  					业务逻辑层
    Model   		无   				数据层
    Middleware  	有   			请求生命周期
    Router  		有   				全局路由表
    Context 		有  					 当前请求
    Dependency  	有   				全局资源

有状态组件:Service、Middleware、Router、Context、Dependency
无状态组件:Controller、Model
这些分析可以帮助理解 框架在 Web 应用中的状态管理和设计模式,从而编写更可靠和高效的代码。

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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