全栈之路-微信小程序-架构总览

  第一阶段是用来学习小程序开发的,这个就相当于PC端的网站吧,只不过现在依靠微信强大的流量来将业务搬移到小程序中,对于企业来说,这是一种很好的发展方向,既减少了开发成本,又减少了推广成本,小程序是很被人看好的,很值得去学习的,主要是写风袖小程序的架构中的特点,梳理一下,并且记录一下电商小程序中的一些特有的知识点,增加点专业的知识。

一、首页

  这个是打开小程序后,首先呈现出来的页面,也是包含了几乎所有的你想给用户展示的,如何将这个首页设计好,这也决定了第一印象吧,第一印象很重要,首页往往是入口类的,这个地方往往是吸引人的眼球的,但是这里面会有很多划分的,我们往往会将入口分为很多种类,方便服务端进行数据库表的设计,易于后期的维护,在电商中,数据库表的设计是非常重要的,很多技巧的东西,这个技巧随着课程的进行,慢慢的积累吧,来学习一下风袖中的首页的排布特点:

1、Banner入口

Banner入口是很复杂的,因为它是多变的,可以设计成很多种选择,比如可以设计成主题入口、活动入口、分类入口,甚至可以设计成商品入口等等,所以Banner入口是单独的一部分,与其他入口区分出来的,我想的是在后台维护的时候,这部分内容应该是单独维护的

2、主题入口

主题入口,当用户点击进去之后就是跟主题相关的商品的列表了

3、分类六宫格

这个就简单了,就是商品的分类信息的展示了,点击进去之后是商品列表的展示

4、活动入口(优惠券入口)

这个在设计图上其实是优惠券入口的,但是其实优惠券也是活动的一种,这里把优惠券归于活动入口之中

优惠券活动详解:(2019年10月30日10:14:40 临时添加)

优惠券是分类别的,你像满减类型的优惠券,折扣类型的,这也会设计一些优惠券的使用条件,像那种全场券还有就是那些品类的券,就是只有在特定种类的商品上才能使用,所以,针对优惠券的这些特点,前端需要做的主要是根据这些,进行核算的功能,一些设计,复杂的业务主要是后端进行处理的,最后,优惠券的使用和领取是两个不同的概念,这个需要进行区分处理的

5、商品长滚动,瀑布流列表

这里是瀑布流展示商品的列表,当然这个是存在分页的,当用户下拉商品列表的时候,可以连续加载更多商品的,至于瀑布流展示的效果如何实现,这里不做过多的说明

6、主题和Banner混合入口

这个是将主题入口和Banner入口混合在一起展示的,在设计图中其实是在热卖榜单那个专题中,上面是主题入口,下面部分是Banner入口(这里是展示商品的Banner)

2019年10月18日15:43:31 未完待续...

二、项目结构

  这个项目结构就是项目的总体的一个如何分层,这里是写的是前端小程序的项目结构,后续还会介绍spring boot项目的结构,等到学习到那里在补充一下。

1、小程序项目分层

这里有一个设计原则,在项目的开始,就是不要把复杂的业务逻辑放在pages文件夹中的js文件中,页面中的js文件就是主要来做数据绑定的,我们将复杂的业务逻辑单独存放与一个抽象出来的model层,其实按照MVC分层模式,pages中的js文件相当于Controller层,就是只是处理数据的分发以及页面中数据的显示,至于如何获取到的数据并不关心,交给model去处理

增加内容:方法命名的规则

(1)获取首页主题的方法,这个方法的命名是根据位置来命名的,比如顶部的获取theme的方法是:getHomePositionA() home->主页 positionA->最上面第一个主题的位置

2019年10月22日14:37:40 未完待续...

2、请求过多的优化

前端页面向服务器发送请求的优化主要存在三种问题(这里以home页面的数据加载来看):

(1)每个数据 都设计成一个http请求

(2)整个home页面需要加载的数据 只设计成一个http请求

(3)有选择性的将一部分请求合并成一个

针对这三个问题,可以从三个维度来综合考虑,来决定如何取舍:

(1)http请求数量

(2)http请求进行了多少次的数据库查询

(3)接口的灵活性和可维护性

三个问题从三个维度综合比较的话,如图:

 

重点的话,这里着重考虑的应该是http请求了多少次数据库的查询这个维度,因为当用户数量庞大的时候,减少一次数据库的查询,为整个项目的性能提升是很有帮助的,但是灵活性和可维护性也是不可或缺的一个点,综合考虑之下,应该是有选择性的合并http请求

补充:这里还介绍了一个JavaScript中的函数式编程,因为一直做的是Java项目,对于这个函数式编程,没有太多的了解,具体有什么优点和缺点,不是很清楚,但是在JDK8 提供了函数式编程,其实就是那种箭头函数,感觉用起来很方便,以后需要重视一下!

举个小例子,函数式编程的优势之处:

 1 // 普通的从数组中选取特定的元素代码
 2 let themeA = null;
 3 for (let theme of themes){
 4     if (theme.name == 't-1'){
 5         themeA = theme
 6     }
 7 }
 8 
 9 // 函数式编程的代码
10 const themeA = themes.find(t => t.name === 't-1')

很显然,函数式编程的代码简洁并且可读性更好啊,但是有什么缺点的话,以我现在的水平还是不是很清楚,适当补补这个知识点!

 2019年11月1日10:51:01 补充,未完待续...

 3、sku的开发

sku是这个项目中最难的一部分,sku的开发中存在很多的技巧以及难点,这里只是记录一下概要,详细的会单独进行记录的

(1)规格值的提取

至于规格值的提取中,大致思路是这样的:

分析接口返回的数据 --> 构建二维数组 --> 利用矩阵的转置思想处理二维数组 --> 得到数据并且进行去重

2019年12月5日10:42:49 补充,未完待续...(鬼知道一个月的时间,我干了点什么,反正没认真学习...)

内容出处:七月老师《从Java后端到全栈》视频课程
原文地址:https://www.cnblogs.com/ssh-html/p/11695309.html