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. 廖雪峰Java16函数式编程-2Stream-5filter

    1.filter简介 Stream.filter()是一个转换方法,把一个Stream转换为另一个Stream. 所谓filter操作,就是对一个Stream的所有元素进行测试,不满足条件的元素就被过 ...

  2. mysql 查询当前日期

    1.本年份 SELECT DATE_FORMAT(NOW(), '%Y'); 2.本月份(显示数字) SELECT DATE_FORMAT(NOW(), '%m'); 3.本月份(显示英文) SELE ...

  3. docker-compose安装及docker-compose.yml详解

    1.下载安装 [root@cx-- ~]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-comp ...

  4. dart中的typedef <函数别名>

    typedef定义如下: typedef 给某一种特定的函数类型起了一个名字,可以认为是一个类型的别名.或者这样理解: 自己定义了一种数据类型,不过这种数据类型是函数类型,按照这种类型实例化后的对象, ...

  5. 浅谈简单实现file控件的图片预览,裁剪和上传。

    1.图片预览之FileReader对象    FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据 ...

  6. PAT甲级——A1123 Is It a Complete AVL Tree【30】

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  7. appium基础一:连接手机和appium-desktop定位元素

    一.获取手机信息 adb devices获取手机或模拟器的设备名 aapt dump badging xxxx.apk获取app的包名.入口等基本信息 如果想要知道手机原生携带的app的基本信息,首先 ...

  8. 如何解决:修改.gitignore后,不生效

    1.git rm -r --cached . 删除缓存 2.git add .   添加要提交的文件 3.git commit -m "update .gitignore" 提交 ...

  9. Win10命令提示符git log中文乱码的解决方案

    在系统环境变量中新建一个名为LESSCHARSET的变量 其值为utf-8 新建完毕后应用,git log就不会出现乱码的问题了^_^ 参考博文:git- win10 cmd git log 中文乱码 ...

  10. Python全栈开发:Ajax全套

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...