電商,產(chǎn)品的設(shè)計(jì)思路

閱讀只需要三分鐘,轉(zhuǎn)載請注明出處。

api.product.dotnet.sdao

商品庫微服務(wù) 接口設(shè)計(jì)說明

  • 文檔介紹###

    商品庫微服務(wù)是一個(gè)是一個(gè)用于提供商品管理微服務(wù),
    不關(guān)注庫存。
    所有管理功能通過REST api對外接口實(shí)現(xiàn)。以下是關(guān)于接口
    設(shè)計(jì)思路.


  • 設(shè)計(jì)思路概要描述###

    商品庫微服務(wù)的功能主要包括:

    • 分類 的CRUD
    • 容器 的CRUD
    • SPUSKU 的CRUD
    • Properties 的CRUD
    • Template 屬性模板的CRUD
    • 以下的均以京東為例:
    Option Description url
    分類 是一個(gè)樹狀形式的分類展示,攜帶有scope.scope有web,app,全球購,商品庫等等 京東首頁
    容器 container,顯示的空間 This link 京東 的分類為例,二級分類下的列表,有多個(gè)列表用于顯示的塊,一個(gè)列表是一個(gè)container。
    SPU 是售賣的商品,每個(gè)商品都有很多的屬性,所有的商品都具備有相同的屬性集就存在SPU表內(nèi) 京東商品展示頁
    SKU 商品.不同商品編號的商品。
    Properties 基本屬性集
    Template 模板屬性集.

  • 設(shè)計(jì)思路詳細(xì)描述###

    • 分類表
    字段:
    {
     Id:"分類編號"
     scope:"作用域",
     name:"名稱",
     displayName:"顯示名稱",
     parentId:"父類編號",
     order:"排序"
     ...
    }
    

    eg:

    |分類1:scope=商品庫分類|
    
    +------電腦
    +----------整機(jī)
    +----------筆電
    +----------配件
    +------手機(jī)
    +----------功能機(jī)
    +----------智能機(jī)
    
    |分類2:scope=APP_UI_Category|
    
    +------首頁
    +----------推薦
    +----------特色
    +----------筆電
    +----------配件
    +------促銷 
    +----------限時(shí)特惠
    +----------團(tuán)購
         
    |分類2:scope=Web|
    +------首頁
    +----------推薦
    +----------熱銷
    +----------時(shí)令
    +----------數(shù)碼
    +------會(huì)員
    +----------特惠
    +----------團(tuán)購
    
>---
>>* **SPU表**
> 
>     字段:
>     {
>      Id:"SpuId"
>      name:"名稱",
>      displayName:"顯示名稱",
>      brand:"品牌",
>      defaultCate_Id:"默認(rèn)分類Id"
>      ...
>     } 
> 是售賣的商品,每個(gè)商品都有很多的屬性,所有的商品都具備有相同的屬性集就存在SPU表內(nèi),比如說Iphone,共同屬性有**Id,Name,displayName,brand(品牌),defaultId(默認(rèn)分類編號**):手機(jī)》智能。共有的屬性(確定所有商品都會(huì)有的屬性)就放在SPU表中作為它的字段,不關(guān)注庫存。

>* 什么是**默認(rèn)分類**?
>>>比如說:Ipone是屬于[3C](https://baike.baidu.com/item/3C%E4%BA%A7%E5%93%81/10865989),手機(jī)屬于移動(dòng)電話,相當(dāng)于類目。

>* 容器相當(dāng)于分類?
>>>容器也是分類,但是不是此分類非彼分類。這里容器的概念是方便UI展示的。請參考Container表
>
>拋開分類不管,我們只管屬性,SPU是所有商品共有的屬性:brand,name.....,SKU是一個(gè)商品下變化的屬性。從程序的角度思考,可以把SPU看成是一個(gè)abstract,SKU是它的實(shí)現(xiàn)類。SKU{Id,name,displayName,商品編號=Id,外部編號(每一個(gè)商品都有一個(gè)69碼),Spu_Id}。


>---
>>* **Container表**
> 
>     {
>      Id:'1'//編號。
>      categoryId:"1",//特色推薦分類
>      categoryName:"特色推薦"
>      container_count:"4"http://特色推薦下的容器數(shù)量
>      container_Id:[1,2,3,4]//包含的容器編號。
>      jsons:'自定義存儲(chǔ)json的內(nèi)容'
>     } 
>     
> 
>     容器表:
>     {
>      Id:'1'//容器編號
>      toples:{title,sub_title,cover,price,link,Id:"可以是文章的,可以是商品的"}//點(diǎn)擊點(diǎn)
>      categoryId:[1,2,3,4,5] //可以屬于多個(gè)分類
>     }  
>     
>假如現(xiàn)在要做一個(gè)在APP上展示的一個(gè) 推薦 產(chǎn)品。如果現(xiàn)在是沒有容器這個(gè)概念,用來設(shè)計(jì)的話,需要把 **容器_name**:推薦 作為屬性存儲(chǔ)?,F(xiàn)在我們單獨(dú)做出一張表來作為容器。容器表有一個(gè)**Id**,也有一個(gè)**默認(rèn)顯示元素?cái)?shù)量**的字段,比如說,我們在一個(gè)頁面上只展示4個(gè)元素塊。而不同的列表顯示的是不同的。記住,它是一個(gè)塊的概念。當(dāng)我們的后臺管理人員把**商品入庫后**,它手動(dòng)操作把某一個(gè)**入庫的商品加入到容器里面**進(jìn)來。所有這個(gè)表也有一個(gè)**productId**。每次讀取容器的時(shí)候就可以查詢該容器下的Product。容器它也有一categoryId。

>* 已經(jīng)存在Category表了,現(xiàn)在容器也有一個(gè)categoryId,它是屬于Category的嗎?
>>>不是,Category是一個(gè)Scope下的分類,而我們已經(jīng)把容器單獨(dú)抽取出來作為一個(gè)表。所以不一樣。容器是用來展示的塊。比如說一個(gè)二級分類(Category表)下有一個(gè)推薦分類(Category表)頁,推薦的展示頁中有一個(gè)塊屬于**”特色推薦“**塊,是用于展示的塊。而Category表沒有展示的概念,是在后臺存儲(chǔ)的。比如說在上面寫的Category分類表,以分類2為例子:**|分類2:scope=APP_UI_Category|**下面有一個(gè)首頁,首頁下邊有一個(gè)推薦分類。以此為例,假如我們想在推薦分類下展示產(chǎn)品,這個(gè)時(shí)候我們并不知道該推薦下有哪些產(chǎn)品,APP首頁推薦下的產(chǎn)品 與 Web 端 首頁 推薦下的產(chǎn)品可能不一樣 ,所以我們把Container單獨(dú)作為一個(gè)表。
>
>>>**每個(gè)分類(Category表)下有多個(gè)容器塊或者一個(gè)容器塊。容器是最小化的,分類(Category是用于劃分的),容器是用來展示的,因?yàn)槲覀冊赨I下是對顯示數(shù)量有控制的,容器是沒有類目這個(gè)結(jié)構(gòu),它是被分類(Category)包含的。它只對自己容器里邊的內(nèi)容進(jìn)行界定,比如說items_count(容器數(shù)量),默認(rèn)放4個(gè),還有items(容器集合),還有自定義存儲(chǔ)json的內(nèi)容(這是一個(gè)動(dòng)態(tài)的內(nèi)容,交給前端處理的,比如說樣式,我希望容器的第一條信息加粗顯示等等。一個(gè)分類包含多個(gè)容器,一個(gè)容器item下包含若干元素(tople),這個(gè)元素就是一個(gè)點(diǎn)擊點(diǎn),用tople表示(點(diǎn)擊的意思),比如說,商品,可以是一個(gè)點(diǎn)擊點(diǎn),一篇文章,一個(gè)視頻都是一個(gè)tople,tople由后臺自動(dòng)或者非自動(dòng)或者人工,把商品的屬性添加到這里來,一個(gè)tople下有title,sub_title,cover,price,link,Id)**
>
>* 一般瀏覽京東的時(shí)候,瀏覽一個(gè)推薦分類下的”精選3折起“塊(容器一),”男子精選“塊(容器二),”女子精選“塊(容器三),當(dāng)我點(diǎn)擊進(jìn)去”精選3折起“(容器一)的時(shí)候不是有多個(gè)商品展示嗎?有如下產(chǎn)品(以[adidas](https://shop.m.jd.com/?shopId=58463)為例),會(huì)看到多個(gè)不同的產(chǎn)品,如下:
>     
>     {
>     
>       "男子跑步鞋¥499 <del>¥899</del>(帶封面,點(diǎn)擊可跳轉(zhuǎn))"
>       
>       "男子訓(xùn)練鞋¥499 <del>¥799</del>(帶封面,點(diǎn)擊可跳轉(zhuǎn))"
>       
>       "男女經(jīng)典鞋¥289 <del>¥869</del>(帶封面,點(diǎn)擊可跳轉(zhuǎn))"
>       
>       ......
>       
>     }
>     
>   回歸到問題,一個(gè)tople下不是應(yīng)該是對應(yīng)多個(gè)產(chǎn)品嗎?怎么字段是       title,sub_title,cover,price,link,Id  ?
>>>   因?yàn)檫@也屬于一個(gè)商品的共性,容器是用來展示的,tople也是用來展示商品的,因?yàn)槲覀冏龅氖请娚唐脚_,所以這里就有展示商品這里針對任何商品,這里展示商品都需要有title,sub_tile,cover(封面,只放一張圖),price,link,Id. 所以這么設(shè)計(jì),就是這個(gè)道理。這里不會(huì)調(diào)加所有”3折起的產(chǎn)品“,這個(gè)tople只是一個(gè)簡化的版本。當(dāng)我們點(diǎn)擊了,就會(huì)跳轉(zhuǎn)到商品詳情頁。[男子跑步鞋¥499 <del>¥899</del>(帶封面,點(diǎn)擊可跳轉(zhuǎn))](https://item.m.jd.com/product/10618699195.html),這個(gè)時(shí)候我們才到商品下去加載商品的東西,什么顏色,尺碼等等屬性。 **這個(gè)Id存放的有可能是文章的Id,skuId等等。**
>
>>>**容器和tople都是用來前端展示的東西**


>---
>>* **SKU表**
> 
>是SPU的擴(kuò)展,SKU可能有N個(gè)分類。所以沒法寫分類Id,但是SPU表下有一個(gè)defaultCate_Id(默認(rèn)分類編號),所以商品入庫的時(shí)候用的是SPU表下的defaultCate_Id。
>
>     字段:
>     {
>      Id:"skuId"
>      name:"屬性名稱",
>      displayname:"",
>      商品編碼:"=Id",
>      外部編碼:"69碼",
>      spu_id:""
>      ...
>     }

>---
>>* **Properties表**
> 
>     字段:
>     {
>      Id:"PropertieId"
>      external_Id:"外部Id",
>      spu_or_sku:"type,spu有屬性,sku也有屬性.",
>      name:"屬性名",
>      value:"屬性值",
>      unit:"單位"
>      ...
>     }
>**比如說:**
>
>>| Id | external_Id |spu_or_sku|name|value|unit|
>>| ---| ----------- |----------|----|-----|----|
>>|10  |   1   |  spu | cpu型號  | x5    |    |
>>|11  |   1   |  spu | color   | red    |    |
>>|12  |   1   |  spu | weight  | 500    |  g   |
>>|13  |   1   |  sku | 內(nèi)存   |   32  |  g  |
>>|14  |   1   |  sku | color  |黑色     |    |
>>|15  |   1   |  sku | bundle_Items  |5,3(都是sku)     |    |

>
>**這張表以后有可能數(shù)據(jù)量大的時(shí)候需要分庫。**
>如果是共有的就寫spu,如果是私有的話,就寫sku。sku是spu的擴(kuò)展。spu的屬性是重復(fù)的屬性,sku的是擴(kuò)展的,所以brand就不需要要了,spu只管非變量的,變量的它不管。
>
> 顯示的時(shí)候,先查找該商品的spuId以及skuId,然后在進(jìn)行查詢展示。其他的就歸前端去展示。
> 
>入庫的時(shí)候,可以選擇模板,也可以自己添加。
>
>---
>>* **Template表**
>
>每個(gè)人不可能把商品的屬性都記得住。所以需要提供一個(gè)Template表。模板是由運(yùn)營人員來寫的。手機(jī)分類下是一個(gè)模板,電腦分類下是一個(gè)模板,其它分類下面也是一個(gè)模板。所以添加產(chǎn)品的時(shí)候有一個(gè)分類Id.當(dāng)我們添加產(chǎn)品的時(shí)候,選擇了分類后,就會(huì)加載默認(rèn)模板,name就代表屬性,以及是否必填項(xiàng),value就是自己填寫的。比如說你賣電腦,就需要把CPU寫到規(guī)格去。模板的作用就是輔助商品入庫的。為了盡量讓name不需要自己寫而出現(xiàn)這個(gè)表的。
> 
>     字段:
>     {
>      Id:"模板編號"
>      name:"屬性名稱",
>      IsRequired:"是否必填",
>      categoryId:"分類Id,商品入庫的時(shí)候需要填寫categoryId"
>      ...
>     }

  • 難點(diǎn)區(qū)分###

    SPU,SKU,Template,Properties之間的關(guān)系

    例子:你去一個(gè)超市,要買一個(gè)Iphone,當(dāng)你跟服務(wù)員說:我要買一個(gè)Iphone,這個(gè)時(shí)候
    服務(wù)員會(huì)問你,你要Iphone 6還是 Iphone 6 plus,還是 Iphone 5 還是 Iphone 7等等,會(huì)把所有型號問你一遍。
    Ipone是代表一個(gè)產(chǎn)品的總稱,或者可以說是品牌。Iphone 6 plus 可以看做一個(gè)商品,進(jìn)行銷售的商品。

    SPU 就代表Iphone 6,Iphone 6 plus, Iphone 5,Iphone 7。有一個(gè)共同的屬性:品牌。
    品牌是所有商品共有的特性。

    Properties:添加完一個(gè)Iphone 7后,就添加 屬于 SPU 的 Properties,這里填寫的是
    Iphone 7 的共同屬性:{weight:xxxg}。而SPU表 填寫的是 所有商品(Ipone,電腦,衣服,酒etc.)的共同屬性,而color是 Iphone 7這個(gè)商品的動(dòng)態(tài)屬性:紅色,黑色等等。{sku:1,color:紅色;sku:1,color:黑色;}所以這個(gè)不同的屬性是填寫屬于Iphone 7的 SKU 的

    SKU 就代表Iphone 6,Iphone 6 plus, Iphone 5,Iphone 7。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容