SKU是整个小程序中最难完成的部分了,好好记录一下SKU,主要是想记录一下 从最开始拿到这个业务到最终完成这个功能期间的思考过程,至于代码什么的,记录也好,不记录也行,再看!

一、从思路说起

1、SKU

开始之前,需要先搞懂SKU是什么东西?指代的是什么?这个具体讲的是什么,这里面主要搞清楚两个概念,一个是规格,一个是规格值。

规格:例如 手机的外壳颜色、运存等

规格值:对外壳颜色来说,具体的规格名可以是黑色、白色。墨绿色 对于运存这个规格来说,具体的规格名可以是64GB 128GB等

SKU就是根据多个规格值来确定单个的商品可以根据运存(规格名)64GB(规格值)、颜色黑色、入网类型全网通等等规格值的组合 确定iPhone11的单个商品

2、SKU开发草稿

有时候总是头疼,当拿到一个复杂的或者是自己不熟悉的业务的时候,不知道从何下手,不知道自己能不能完成,其实是很害怕自己不能完成的,因为接触自己不熟悉的领域,知道到那一刻,脑子是一片空白的,完全是被吓住了,其实每当做完的时候,回头想想,其实也挺简单的,没有什么难以写出来的代码,这里不说算法,只是针对业务开发啊,算法是想破头,也写不出来,哈哈,所以现在很重视写代码的思路问题,这次跟着七月老师来学习,想把一些开发的思路记录下来,这次SKU开发,老师提到了一个开发草稿的知识,哈哈,可以简单的打个草稿,把页面的大概的轮廓勾勒出来,然后再细化那些细节,我觉得这种方法由外到内,由浅入深,很好啊!

(1)realm组件

首先是新建的一个realm组件,先说realm这个单词的意思,领域的意思,这里也有总控制器的意思,这里控制SKU展示以及选择,但是需要调取其他的组件来协同完成这个SKU功能

在这里组件index.wxml文件中 用view标签先大体做个结构性的骨架,其伪代码是这样的:

 <view class="container">
<view>
<image></image>
</view>
<block wx:for="{{}}">
<s-fence></s-fence>
</block>
<view class="counter-container">
<l-counter></l-counter>
</view>
</view>

最上面是商品的图片以及名称等信息,中间是规格名以及规格值的选择,最后是一个数量选择器,底部会是一个加入购物车和立即购买的按钮,重点来看中间规格名与规格值那部分

(2)fence组件

抽象出这个fence组件,之所以为什么叫fence,还是先看看这个fence的意思哈,这里说一下,七月老师这个命名还是很讲究的,fence有篱笆;栅栏;围栏;(障碍赛马中的)障碍物这些意思,大概理解还是栅栏比较合适,每个规格名和规格值的组合就是一个栅栏,至于多个组合,我们只需要循环出来就好了,由于这个fence组件是主要的,所以这里提取出来了两个业务的相关的JS文件,来实现复杂业务的分离,这其实也就是模型类,来梳理写代码的思路,一个是fence.js,一个是fence-group.js文件,现在也不是很熟悉这里面的到底要写哪些代码,等以后再补充一点,先看一下fence组件的骨架代码,大概的一个轮廓

 <view class="container">
<view class="title"></view>
<view></view>
</view>

上面是规格名称 下面是规格值的列表,是横向排列的

(3)数据的流向问题

至于数据的流向问题,这里简单的介绍一下,数据是怎么传递的:

商品入口获取到商品的id --> 根据商品ID从服务器获取spu详情数据 --> 在detail页面中进行绑定 --> 通过realm组件属性进行数据的传递

以下4和5是 2019年12月9日10:44:57 补充...

(4)cell组件 

这个是随着开发的进行,后来重新创建的组件,这个组件就细化到最小的处理单位了,细化到一个规格值,例如金属灰、七龙珠这种用户点击的规格值了

(5)models处理类

与每个组件相对应的会抽象出一个逻辑处理类,主要就是完成逻辑代码的编写:

fence-group.js 所有规格名的类

fence.js 单一规格名下的所有规格值的类

cell.js 最小单元规格值的类

judger.js 总控制类

matrix.js 矩阵处理类

sku-code.js sku匹配路径的数据字典

3、SKU开发难点分析

(1)规格值的提取

规格值的提取这里用到了数学中的矩阵的思想来解决,用到的是二维数组来进行的矩阵转置,其实转置思想在这里就是将二维数组中单个元素的行列进行颠倒

矩阵转置:https://baike.baidu.com/item/矩阵转置/4150715

重点分析:

知道了矩阵转置,看一下接口返回的数据的结构,这里主要看的是规格值,也就是sku_list下面的specs

接口的详细介绍地址:https://course.7yue.pro/lin/sleeve/3%20API:Banner.html#spu-商品

把接口中返回的示例数据进行提取,然后进行组合成二维数组,你会发现,大概是这个样子的(后面是单个元素的下标):

 金属灰[0,0] 七龙珠[0,1] 小号 S[0,2]  第一行
青芒色[1.0] 灌篮高手[1,1] 中号 M[1,2] 第二行
青芒色[2,0] 圣斗士[2,1] 大号 L[2,2] 第三行
橘黄色[3,0] 七龙珠[3,1] 小号 S[3,2] 第四行

将这个进行转置,转置之后大概是这个样子的:

 金属灰[0,0] 青芒色[0,1]   青芒色[0,2] 橘黄色[0,3]     第一行
七龙珠[1,0] 灌篮高手[1,1] 圣斗士[1,2] 七龙珠[1,3] 第二行
小号 S[2,0] 中号 M[2,1] 大号 L[3,2] 小号 S[3,3] 第三行

这个后续还有去重复的工作:

2019年12月5日10:45:34补充,未完待续...

(2)规格值状态的确定

这个其实是将规格值进行组合,来确定最终的一个SKU,规格值的状态是分为三种的:可选、选中(可反选的)、不可选(禁用)

这里面有一句话可以概括这个计算过程:用户每选择一次都是需要重新计算所有规格值的状态

突破点:

待确认的SKU路径
已确认的SKU路径

已存在的SKU路径需要存取的 然后从这个字典中进行匹配,这里面包含完整的SKU路径和部分的SKU路径

举例说明:

4条完整的SKU路径:
  金属灰 七龙珠 小号 S
  青芒色 灌篮高手 中号 M
  青芒色 圣斗士 大号 L
  橘黄色 七龙珠 小号 S

部分路径:
  金属灰
  七龙珠
  小号 S
  金属灰 七龙珠
  金属灰 小号 S
  七龙珠 小号 S
  。。。
  。。。

所有的路径共计28种

2019年12月9日11:01:59补充,未完待续...

用户Sku状态的选择:

当用户进行Sku规格值的选择的时候,如何进行其他Sku状态的确定的时候,这里是存在规律的,至于规律是如何找出来的,肯定是不断思考,完善,总结出来的,这里面的规律是:

  已选中的Cell,不需要判断潜在路径

  对于某个Cell,它的潜在路径应该是,它自己加上其他行的已选Cell

  对于某个Cell,不需要考虑当前行的其他Cell是否已选

2019年12月12日10:08:03补充,未完待续...

内容出处:七月老师《从Java后端到全栈》视频课程

七月老师课程链接:https://class.imooc.com/sale/javafullstack

全栈之路-微信小程序-SKU开发(分析)的更多相关文章

  1. 全栈之路-微信小程序-SKU开发(代码)

    SKU开发是小程序中最难的一部分,思路在分析中已经记录过了,这里主要看一下代码的实现,感觉老师写的代码太棒了,很优雅!主要想记录一下写代码的思路,对面向对象编程的实践. 一.代码结构的分析 1.说明几 ...

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

    第一阶段是用来学习小程序开发的,这个就相当于PC端的网站吧,只不过现在依靠微信强大的流量来将业务搬移到小程序中,对于企业来说,这是一种很好的发展方向,既减少了开发成本,又减少了推广成本,小程序是很被人 ...

  3. 微信小程序云开发-从0打造云音乐全栈小程序

    第1章 首门小程序“云开发”课程,你值得学习本章主要介绍什么是小程序云开发以及学习云开发的重要性,并介绍项目的整体架构,真机演示项目功能,详细介绍整体课程安排.课程适用人群以及需要掌握的前置知识.通过 ...

  4. 小程序语音红包开发中 汉字转拼音的问题 微信小程序红包开发遇到的坑

    公司最近在开发微信小程序的红包功能,语音红包需要用到文字转拼音的功能. 之前介绍过怎么将中文的汉字转为拼音的,具体看下面这篇文章. 微信语音红包小程序开发如何提高精准度 红包小程序语音识别精准度 微信 ...

  5. 微信小程序快速开发上手

    微信小程序快速开发上手 介绍: 从实战开发角度,完整系统地介绍了小程序的开发环境.小程序的结构.小程序的组件与小程序的API,并提供了多个开发实例帮助读者快速掌握小程序的开发技能,并能自己动手开发出小 ...

  6. 《微信小程序商城开发实战》笔者的新书,欢迎各位粉丝上京东购买

    作者图书京东链接,请点击------>>>    **微信小程序商城开发实战** 附京东真实评价截图: 编辑推荐 在当今移动互联网大潮中,微信应用凭借其庞大的用户基数和极强的用户黏性 ...

  7. vue+uni-app商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录

    一. 前言 本篇通过实战来讲述如何使用uni-app快速进行商城微信小程序的开发以及小程序如何接入后台Spring Cloud微服务. 有来商城 youlai-mall 项目是一套全栈商城系统,技术栈 ...

  8. 【推荐】开源项目minapp-重新定义微信小程序的开发

    minapp 重新定义微信小程序的开发 官网:https://qiu8310.github.io/minapp/ 作者:Mora minapp 重新定义微信小程序的开发 使用 用 npm 安装命令行工 ...

  9. 【微信小程序】开发实战 之 「配置项」与「逻辑层」

    微信小程序作为微信生态重要的一环,在实际生活.工作.商业中的应用越来越广泛.想学习微信小程序开发的朋友也越来越多,本文将在小程序框架的基础上就微信小程序项目开发所必需的基础知识及语法特点进行了详细总结 ...

随机推荐

  1. php数组的快速排序

    function quick($array){ if(count($array)<=1){ return $array; } $key=$array[0]; $right=array(); $l ...

  2. git使用过程中问题

    git提交文件命令顺序 fetch merge add commit pull push 取消已add文件 git reset HEAD 文件名 覆盖本地文件 git checkout 文件名 $ g ...

  3. 数论+线性dp——cf1174A

    直接推公式没有推出来 看了题解才会做.. 首先能够确定前面几个数的gcd一定是2^j * 3^k, 其中k<=1 那么可以用dp[i][j][k]来表示到第i位的gcd是2^j*3^k f(j, ...

  4. docker中国区镜像加速

    [root@syzyy ~]# vim /etc/docker/daemon.json { "registry-mirros":[ "https://registry.d ...

  5. Ubuntu 更新错误修复大全

    合并列表问题 当你在终端中运行更新命令时,你可能会碰到这个错误“合并列表错误”,就像下面这样: E:Encountered a section with no Package: header, E:P ...

  6. python处理多线程之间事件通讯方法

    一.什么是事件 每执行一个事情,肯定有该事情的执行后状态,那事件就是该事情发生的信号 在程序中,多线程之间需要通讯,而事件就是方便线程之间的通讯 案例: 1.服务器启动需要5秒 2.客服端启动后去链接 ...

  7. HDU-6375-度度熊学队列-双端队列deque/list

    度度熊正在学习双端队列,他对其翻转和合并产生了很大的兴趣. 初始时有 NN 个空的双端队列(编号为 11 到 NN ),你要支持度度熊的 QQ 次操作. ①11 uu ww valval 在编号为 u ...

  8. 第十七篇:csv拆分、csv转excel方法

    首先对微软的office功能表示敬佩!可能是这些办公软件太过平常化,所以体会不到他有多牛!csv格式数据以前没接触过,百度百科定义,Comma-Separated Values,CSV,逗号分隔值,或 ...

  9. 透视jvm之垃圾回收

    JVM是JAVA世界的核心,了解它有助于我们更好调试,调优和开发程序,最近散仙在看JAVA特种兵一书,看完觉得,作者写的内容还是挺不错,大家感兴趣的,也可以购买本温故而知新下. 在JVM中,我们经常提 ...

  10. 2018-11-19-WPF-在image控件用鼠标拖拽出矩形

    title author date CreateTime categories WPF 在image控件用鼠标拖拽出矩形 lindexi 2018-11-19 15:35:13 +0800 2018- ...