mall学习教程官网:macrozheng.com 1. 概览日常开发中,最繁琐的便是编写 Controller。很多公司都制定了规范:Controller 不能存在任何的业务逻辑,主要完成参数解析和结果转换。不过查看项目源码,你会发现 Controller 中存在了大量不该存在的逻辑,对此,你有什么好的方法?依赖 Code Review?从我角度,我觉得 Controller 根本就不需要存在。 1.1. 背景之前对 CommandService 和 QueryService 进行封装,通过定义接口的方式快速搭建应用服务,大大提升了开发效率和代码质量,在有了应用服务之后,便是在其基础之上编写 Controller,把能力暴露出去。这是一个非常繁琐且没有技术含量的重复工作。而对于枯燥的重复工作,我的策略一直都是“交由框架完成”。 1.2. 目标简单的说,我们的目标便是不写Controller,但还要保留 Controller 的效果。
2. 快速入门2.1. 环境准备首先,在 pom 中增加 lego-starter,具体如下: <dependency> 其次,增加 swagger 相关依赖,具体如下: <dependency> 最后,新建 SpringFoxConfiguration,启用 Swagger 具体如下: @Configuration 2.2. 初识统一控制器打开浏览器,输入 http://127.0.0.1:8080/swagger-ui/ 打开 swagger 界面,会发现新增两个 Controller: command-dispatcher-controller 是对 CommanderService 的Web暴露,主要用于执行写入和更新等业务操作,两个接入点包括:
query-dispatcher-controller 是对 QueryService 的Web暴露,主要用于执行业务的查询操作,同样支持 RequestBody 和 RequestParam 两种接入方式。与 command-dispatcher-controller 唯一区别是提供了对 Get 方法支持。 但在展开方法后,有点让人绝望。 serviceName 和 method 两个参数从哪获取?nativeRequest 和 nativeResponse 又是什么东西?这两个接口怎么使用? 看不明白也正常,因为我们不会直接使用这两个处理器。 2.3. Command 控制器2.3.1. 启用 Command 控制器在 OrderCommandService 接口上增加 @AutoRegisterWebController 注解,将其对外暴露为 Web 端口。 @CommandServiceDefinition( 2.3.2. 使用 Order Command 控制器输入 http://127.0.0.1:8080/swagger-ui/ 访问 swagger 界面,发现新增一组 Controller。 OrderCommandService 服务中的所有方法全部出现在 Controller 中。 首先,展开 CommandByBody 中的 create 方法,可见: 然后,展开 CommandByParam 中的 create 方法,具体如下: 整体结构和手写 Controller 基本一致,所暴露的功能也全部相同。 2.4. Query 控制器2.4.1. 启用 Query 控制器在 OrderQueryService 接口上增加 @AutoRegisterWebController 注解,将其对外暴露为 Web 端口。 @QueryServiceDefinition(domainClass = Order.class, 2.3.2. 使用 Order Query 控制器输入 http://127.0.0.1:8080/swagger-ui/ 访问 swagger 界面,发现新增一组 Controller。 OrderQueryService 服务中的所有方法全部出现在 Controller。 首先,展开 QueryByBody 中的 pageByUserId 方法,可见: 然后,展开 QueryByParam 中的 pageByUserId 方法,具体如下: 入参与返回值结构非常清晰,整体结构和手写 Controller 基本一致,所暴露的功能也全部相同。 3. 设计&扩展整个设计分为两部分:
3.1. 统一 Controller提供 QueryDispatcherController 作为所有查询请求的入口,核心架构如下: 初始化流程如下:
执行流程如下:
3.2. 与 Swagger 集成提供 QueryServicesProvider 与 Swagger 进行集成,提供完整的 api doc,整体设计如下: QueryServiceProvider 与 QueryDispatcherController 一致,同样依赖于 QueryMethodRegistry 中的 QueryMethod 信息。 核心流程如下:
4. 项目信息项目仓库地址:https://gitee.com/litao851025/lego 项目文档地址:https://gitee.com/litao851025/lego/wikis/support/web Github上 标星60K 的电商实战项目mall,全套 视频教程(2023最新版) 已更新完毕!全套教程约40小时,共113期 ,通过这套教程你可以拥有一个涵盖主流Java技术栈的完整项目经验 ,同时提高自己独立开发一个项目的能力 ,下面是项目的整体架构图,感兴趣的小伙伴可以点击链接 mall视频教程 加入学习。整套 视频教程 的内容还是非常完善的,涵盖了mall项目最佳学习路线、整体框架搭建、业务与技术实现全方位解析、线上Docker环境部署、微服务项目学习等内容,具体大纲可以参考下图,你也可以点击链接 mall视频教程 了解更多内容。 推荐阅读
上一篇:【云南招聘】云南汉盟制药有限公司招聘 15000元/月 五险一金!! 下一篇:腾讯云数据库亮相 DTC 2024,“国产化+智能化”双赛道驱动未来创新 |