从这节开始我们就进入项目需求的开发阶段了,我们在专栏的第一部分主要是搭建框架,第二部分除了为框架补充需要的组件外还普及了怎么为项目做模块划分,业务逻辑如何做分层解耦。
接下来的实战需求开发部分的内容大家在阅读时除了关注功能是怎么实现的,还要在看项目代码时留意一下是怎么按照我们在《Go项目模块划分、逻辑分层解耦》中讲解的方法论做分层解耦合的。
这些方法论并不是铁板一块,不是说写代码只能这么写,还得靠自己根据项目特征来进行变通、慢慢体会把他们变成自己的东西,只有这样不停地的重复加演练和理解,才能自己的项目中才能把这些方法论真正应用起来。
我们的开发实战部分主要涵盖两部分:
一套支持多平台登录,Token泄露检测、同平台多设备登录互踢功能的用户认证体系
商城 app C端接口主要功能的实现
因为只要面向用户的产品应用都需要用户认证体系所以在项目代码上它们仍是一个项目,其中会把怎么建设用户认证体系做一个详细的介绍和功能实现,未来假如你需要做自己的产品时可以直接移植过去再加上一些微信登陆、公众号扫码登陆之类的功能与之结合很快就能建设好产品的用户和认证体系。
好了,在真正进入开发环节前我必须把项目需求的功能、大体流程还有项目的业务结构给大家介绍和分析一下,大家可以把它当成一个立项阶段的项目技术评审。

我们这节主要用来大家建立以下共识:
项目需求的主要功能是什么?
项目开发时要划分成哪些业务模块?即业务的结构分析
结合业务结构分析推演出我们的库表结构
真正的技术评审除了业务结构分析外,还要有业务的流程分析,一些主要功能的流程分析我会在对应章节再给大家配合着UML图进行介绍和分析。
项目功能介绍和分析
之所以选商城项目是因为大家对商场应用的业务形态都很熟悉,不需要太多解释大家就能理解,还有就是业务流程还算多变(只要跟营销扯上边都要三天两头的变),把一些设计模式应用在它们中并不会显得为了用设计模式而用。
针对商场项目,大家可以随便打开淘宝、京东、拼多多这些APP看一看,它们的产品构成都差不多。

首先能看到的页面构成无外乎:首页、商品分类、购物车和订单列表,具体使用的时候还会有下集的商品列表、搜索、商品详情等页面,以及用户个人页面。
当我们接到一个这样的商城需求后,我们该怎么分析呢?我估计很多人可能已经开始想库表结构,把字段有几个枚举值都想好了。着啥急呢,美女瞅了你一眼、碰了你一下,你就把你们第二个孩子的名都想好了,哈哈哈。
我在画图课专栏的《怎么做好技术评审--业务结构分析和建模》一文中曾经讲过,业务需求的分析我们可以先拿一张纸或者打开绘图软件的一个空画布,先把粗略的流程想一下:
需求有哪些部分构成?
找一条典型的流程路径,想一下这些构成部分是怎么参与进来的?
然后我们把构成部分在纸上或者画布上用一个方框表示,方框之间有交互则用箭头或者直接连接起来,在旁边标注上它们是怎么参与到流程中的。
使用购物App购物这个典型流程,我们可以画出来一个类似下面的草图。
这个草图就是未来为项目做结构分析和模块划分的雏形。
随着你对项目的PRD也就是产品需求文档逐步阅读,对需求了解更深入后,你可以使用用例图梳理出来一个项目的主要用例流,用例即功能,比如我们站在顾客的角度,可以梳理出用户在使用App过程中会用到的功能。
如果你们的产品经理足够专业,除去Token认证和刷新功能外,这个用例流他们是会帮你梳理出来的,当然你自己掌握这项技能也不是坏事,能让你多从用户角度进行思考。
看到这里我说明一下,本文在Go专栏中已经设置成免费阅读章节,加上全部内容较长,这里我只做一个文章主题的介绍和引入,点击“阅读原文”即可跳转到全文进行阅读。
看完有兴趣的同学可扫码订阅专栏,除了能参考专栏学习项目搭建的技能,还能结合大量实战场景的代码演练真正掌握代码分层和整洁开发的精髓。

本专栏分为五大部分,大部分内容已经更新完成

第一部分介绍让框架变得好用的诸多实战技巧,比如通过自定义日志门面让项目日志更简单易用、支持自动记录请求的追踪信息和程序位置信息、通过自定义Error在实现Go error接口的同时支持给给错误添加错误链,方便追溯错误源头。
第二部分:讲解项目分层架构的设计和划分业务模块的方法和标准,让你以后无论遇到什么项目都能按这套标准自己划分出模块和逻辑分层。后面几个部分均是该部分所讲内容的实践。
第三部分:设计实现一个套支持多平台登录,Token泄露检测、同平台多设备登录互踢功能的用户认证体系,这套用户认证体系既可以在你未来开发产品时直接应用
第四部分:商城app C端接口功能的实现,强化分层架构实现的讲解,这里还会讲解用责任链、策略和模版等设计模式去解决订单结算促销、支付方式支付场景等多种多样的实际问题。
第五部分:单元测试、项目Docker镜像、K8s部署和服务保障相关的一些基础内容和注意事项
扫描上方二维码或者访问 https://xiaobot.net/p/golang 即刻订阅