...

這(zhè)10個(gè)功能模塊,手把手教你從零設計電商系統

2022-01-23

圖片




新公司很快就(jiù)成立了(le/liǎo),你成了(le/liǎo)新公司的(de)CTO。關于(yú)改變世界,目前唯一(yī / yì /yí)能确定的(de)是(shì),首先要(yào / yāo)做一(yī / yì /yí)個(gè)電商系統。具體要(yào / yāo)做成什麽樣,目前還不(bù)清楚。你需要(yào / yāo)與老闆讨論業務需求。


  • 你:“咱們要(yào / yāo)做的(de)業務模式是(shì)C2C、B2C還是(shì)B2B呢?”

  • 老闆:“什麽B?什麽C?我不(bù)懂你說(shuō)的(de)那些技術名詞。”

  • 你:“這(zhè)麽說(shuō)吧,你要(yào / yāo)做一(yī / yì /yí)個(gè)某寶網,還是(shì)某東網,還是(shì)某848網呢?”

  • 老闆:“不(bù)都是(shì)一(yī / yì /yí)樣的(de)嗎?它們之(zhī)間有什麽區别?你趕緊做一(yī / yì /yí)個(gè)出(chū)來(lái)我看看不(bù)就(jiù)知道(dào)了(le/liǎo)?!”



故事發展到(dào)這(zhè)裏,作爲(wéi / wèi)程序員的(de)你是(shì)不(bù)是(shì)有一(yī / yì /yí)種似曾相識的(de)感覺?現實就(jiù)是(shì),需求永遠不(bù)明确,永遠在(zài)變化,唯一(yī / yì /yí)不(bù)變的(de)隻有變化。優秀的(de)程序員适應變化,并且擁抱變化。在(zài)需求還不(bù)太明确的(de)情況下,比較可行的(de)方案就(jiù)是(shì),首先搭建不(bù)太會發生變化的(de)核心系統,然後盡量簡單地(dì / de)實現一(yī / yì /yí)個(gè)最小化的(de)系統,後續再逐步叠代和(hé / huò)完善。


01 設計電商系統的(de)核心流程

接下來(lái),我們一(yī / yì /yí)起設計這(zhè)個(gè)電商的(de)核心系統。

遵照軟件工程的(de)一(yī / yì /yí)般規律,我們先從需求階段開始。那麽,需求分析應該如何做呢?理想情況下,系統分析師或産品經理應該負責完成需求分析的(de)任務。但是(shì),現實中絕大(dà)多數情況下,你得到(dào)的(de)所謂的(de)“需求”,很有可能就(jiù)是(shì)一(yī / yì /yí)兩句話。需求分析的(de)工作最終往往是(shì)由開發者完成的(de)。

很多項目交付以(yǐ)後,仍需要(yào / yāo)不(bù)斷地(dì / de)進行修改和(hé / huò)變更,用戶不(bù)滿意,開發者也(yě)很痛苦,造成這(zhè)個(gè)問題的(de)根本原因其實就(jiù)是(shì)缺失了(le/liǎo)需求分析的(de)步驟。所以(yǐ),爲(wéi / wèi)了(le/liǎo)後續工作能夠順利開展,每位開發者都應該掌握一(yī / yì /yí)些用于(yú)需求分析的(de)方法。

那麽,開發者進行需求分析時(shí)應該做些什麽呢?這(zhè)裏先不(bù)介紹那些做需求分析的(de)方法和(hé / huò)理論,隻告訴你最重要(yào / yāo)、最關鍵的(de)一(yī / yì /yí)個(gè)點:不(bù)要(yào / yāo)一(yī / yì /yí)上(shàng)來(lái)就(jiù)設計功能,而(ér)是(shì)先明确下面這(zhè)兩個(gè)問題的(de)答案。


  1. 這(zhè)個(gè)系統(或者功能)是(shì)給哪些人(rén)用的(de)?
  2. 這(zhè)些人(rén)使用這(zhè)個(gè)系統是(shì)爲(wéi / wèi)了(le/liǎo)解決什麽問題?



這(zhè)兩個(gè)問題的(de)答案,我們稱之(zhī)爲(wéi / wèi)業務需求。那麽,對于(yú)我們将要(yào / yāo)設計的(de)電商系統,其業務需求又是(shì)什麽呢?如果大(dà)家很熟悉電商的(de)業務,那麽回答這(zhè)兩個(gè)問題應該很容易。

第一(yī / yì /yí)個(gè)問題,電商系統是(shì)給哪些人(rén)用的(de)?首先是(shì)買東西的(de)人(rén),即“用戶”;其次是(shì)賣東西的(de)人(rén),即“運營”;還有一(yī / yì /yí)個(gè)非常重要(yào / yāo)的(de)角色就(jiù)是(shì)出(chū)錢的(de)人(rén),即“管理者”(請記住,在(zài)設計任何一(yī / yì /yí)個(gè)系統的(de)時(shí)候,管理者的(de)意見都是(shì)非常重要(yào / yāo)的(de))。綜上(shàng)所述,電商系統是(shì)面向用戶、運營和(hé / huò)管理者開發的(de)。

第二個(gè)問題,用戶、運營和(hé / huò)管理者使用電商系統分别想要(yào / yāo)解決什麽問題?這(zhè)個(gè)也(yě)很容易回答,用戶爲(wéi / wèi)了(le/liǎo)買東西,運營爲(wéi / wèi)了(le/liǎo)賣東西,管理者需要(yào / yāo)通過系統了(le/liǎo)解自己所得的(de)收益。

這(zhè)兩個(gè)問題的(de)答案,或者說(shuō)業務需求,稍加細化後,可以(yǐ)用圖1-1進行清晰的(de)表述。

圖片
▲圖1-1 電商系統用例圖

圖1-1在(zài)UML(統一(yī / yì /yí)建模語言)中稱爲(wéi / wèi)用例圖(Use Case),是(shì)我們進行需求分析的(de)時(shí)候所要(yào / yāo)畫的(de)第一(yī / yì /yí)張圖。用例圖可用于(yú)回答業務需求中的(de)兩個(gè)關鍵問題,即這(zhè)個(gè)系統給誰用?他(tā)們用這(zhè)個(gè)系統是(shì)爲(wéi / wèi)了(le/liǎo)解決什麽問題?

一(yī / yì /yí)般來(lái)說(shuō),業務需求與我們要(yào / yāo)設計的(de)系統關系不(bù)大(dà)。爲(wéi / wèi)什麽這(zhè)麽說(shuō)呢?因爲(wéi / wèi)我們将圖1-1中的(de)用例,放在(zài)傳統的(de)商業企業(比如,一(yī / yì /yí)個(gè)小雜貨鋪、一(yī / yì /yí)個(gè)線下實體商場或商店,或者一(yī / yì /yí)個(gè)做電視購物的(de)公司)中也(yě)是(shì)适用的(de),所以(yǐ),做業務需求的(de)主要(yào / yāo)目的(de)是(shì)理清楚業務場景是(shì)怎樣的(de)。

下面就(jiù)來(lái)分析電商系統的(de)業務流程。很顯然,電商系統最主要(yào / yāo)的(de)業務流程,一(yī / yì /yí)定是(shì)購物流程。購物流程很簡單,具體流程如圖1-2所示。

所有電商的(de)購物流程幾乎都是(shì)如此,下面就(jiù)來(lái)分析一(yī / yì /yí)下這(zhè)個(gè)流程。

圖片
▲圖1-2 電商系統購物流程圖

流程從用戶選購商品開始,用戶首先在(zài)App中浏覽商品,找到(dào)心儀的(de)商品之(zhī)後,把商品添加到(dào)購物車,選完商品之(zhī)後,打開購物車,提交訂單。下單結算之(zhī)後,用戶就(jiù)可以(yǐ)支付了(le/liǎo)。支付成功後,運營人(rén)員會爲(wéi / wèi)已經支付的(de)訂單發貨,爲(wéi / wèi)用戶郵寄相應的(de)商品。最後,用戶收到(dào)商品并确認收貨。至此,一(yī / yì /yí)個(gè)完整的(de)購物流程就(jiù)結束了(le/liǎo)。


02 根據流程劃分功能模塊

接下來(lái),我們再進一(yī / yì /yí)步細化電商購物的(de)業務流程,看一(yī / yì /yí)下電商系統是(shì)如何實現該流程的(de)。圖1-3所示的(de)是(shì)細化之(zhī)後的(de)電商系統購物流程時(shí)序圖(Sequence Diagram)。

圖片
▲圖1-3 電商系統購物流程時(shí)序圖

下面就(jiù)來(lái)詳細講解圖1-3所示的(de)時(shí)序圖中的(de)各個(gè)步驟。


  1. 用戶浏覽商品,這(zhè)個(gè)步驟需要(yào / yāo)通過一(yī / yì /yí)個(gè)商品模塊來(lái)展示商品詳情頁,用戶可以(yǐ)從中獲取所浏覽商品的(de)詳細介紹和(hé / huò)價格等信息。
  2. 然後,用戶把選好的(de)商品加入購物車,這(zhè)個(gè)步驟需要(yào / yāo)使用一(yī / yì /yí)個(gè)購物車模塊來(lái)維護用戶購物車中的(de)商品。
  3. 接下來(lái)是(shì)用戶下單,這(zhè)個(gè)步驟需要(yào / yāo)基于(yú)一(yī / yì /yí)個(gè)訂單模塊來(lái)創建新訂單。訂單創建好了(le/liǎo)之(zhī)後,系統需要(yào / yāo)把訂單中的(de)商品從購物車中删減掉。
  4. 訂單創建完成後,系統需要(yào / yāo)引導用戶付款,即發起支付流程,可通過一(yī / yì /yí)個(gè)支付模塊來(lái)實現支付功能,用戶成功完成支付之(zhī)後,系統需要(yào / yāo)把訂單的(de)狀态變更爲(wéi / wèi)“已支付”。
  5. 成功支付之(zhī)後,運營人(rén)員就(jiù)可以(yǐ)發貨了(le/liǎo),發貨之(zhī)後,系統需要(yào / yāo)扣減對應商品的(de)庫存數量,這(zhè)個(gè)步驟需要(yào / yāo)基于(yú)一(yī / yì /yí)個(gè)庫存模塊來(lái)實現庫存數量的(de)變更,同時(shí)系統還需要(yào / yāo)把訂單狀态變更爲(wéi / wèi)“已發貨”。
  6. 最後,用戶收到(dào)商品,在(zài)系統中确認收貨,系統需要(yào / yāo)把訂單狀态變更爲(wéi / wèi)“已收貨”,流程結束。



這(zhè)個(gè)流程涉及5大(dà)功能模塊,即商品、購物車、訂單、支付和(hé / huò)庫存,這(zhè)5大(dà)模塊就(jiù)是(shì)一(yī / yì /yí)個(gè)電商系統中的(de)核心功能模塊。

當然,僅有這(zhè)5個(gè)模塊是(shì)不(bù)夠的(de),因爲(wéi / wèi)我們隻分析了(le/liǎo)“購物”這(zhè)個(gè)最主要(yào / yāo)的(de)流程,并沒有完全涵蓋業務需求中的(de)全部用例,比如,運營人(rén)員進貨、管理者查看報表等還沒有覆蓋到(dào)。

相比購物流程,剩下的(de)幾個(gè)用例和(hé / huò)流程都相對簡單一(yī / yì /yí)些,我們可以(yǐ)采用同樣的(de)方法來(lái)分析其他(tā)的(de)功能模塊。這(zhè)裏将省略分析過程,直接給出(chū)我們所要(yào / yāo)實現的(de)電商系統的(de)功能模塊劃分(如圖1-4所示)。

圖片
▲圖1-4 電商系統功能模塊劃分

圖1-4使用了(le/liǎo)UML中的(de)包圖(Package Diagram)來(lái)表示電商系統的(de)功能模塊。

整個(gè)系統按照功能,可以(yǐ)劃分爲(wéi / wèi)10個(gè)模塊,除了(le/liǎo)購物流程中涉及的(de)商品、訂單、購物車、支付和(hé / huò)庫存這(zhè)5個(gè)模塊之(zhī)外,還補充了(le/liǎo)促銷、用戶、賬戶、搜索推薦和(hé / huò)報表這(zhè)5個(gè)模塊,這(zhè)些都是(shì)構建一(yī / yì /yí)個(gè)電商系統必不(bù)可少的(de)功能模塊。下面就(jiù)來(lái)逐一(yī / yì /yí)說(shuō)明每個(gè)模塊需要(yào / yāo)實現的(de)功能。


  1. 商品:維護和(hé / huò)展示商品的(de)相關信息。
  2. 訂單:維護訂單信息和(hé / huò)訂單狀态,計算訂單金額。
  3. 購物車:維護用戶購物車中商品的(de)信息。
  4. 支付:負責與系統内外部的(de)支付渠道(dào)對接,實現支付功能。
  5. 庫存:維護商品的(de)庫存信息。
  6. 促銷:制定促銷規則,計算促銷優惠信息。
  7. 用戶:維護系統的(de)用戶信息,注意,用戶模塊是(shì)一(yī / yì /yí)個(gè)業務模塊,一(yī / yì /yí)般不(bù)負責用戶的(de)登錄和(hé / huò)認證,這(zhè)是(shì)兩個(gè)完全不(bù)同的(de)功能。
  8. 賬戶:賬戶模塊負責維護用戶的(de)賬戶信息。
  9. 搜索推薦:提供商品搜索功能,并負責各種商品列表頁和(hé / huò)促銷頁的(de)組織和(hé / huò)展示,簡單地(dì / de)說(shuō)就(jiù)是(shì),搜索推薦決定用戶優先看到(dào)哪些商品。
  10. 報表:實現數據統計和(hé / huò)分析功能,生成報表,爲(wéi / wèi)管理者進行經營分析和(hé / huò)決策提供數據信息。



這(zhè)裏需要(yào / yāo)特别說(shuō)明的(de)是(shì),促銷模塊是(shì)電商系統中最複雜的(de)一(yī / yì /yí)個(gè)模塊。各種優惠券、滿減、返現等促銷規則,每一(yī / yì /yí)條都非常複雜,再加上(shàng)這(zhè)些規則往往還要(yào / yāo)疊加計算,有時(shí)甚至會複雜到(dào)連制定促銷規則的(de)人(rén)都算不(bù)清楚。

所有電商公司無一(yī / yì /yí)例外都曾因爲(wéi / wèi)促銷規則制定失誤,導緻商品實際售價遠低于(yú)成本價,使公司受到(dào)一(yī / yì /yí)定程度的(de)損失。盡管如此,五花八門的(de)促銷活動依然是(shì)提升銷量最有效的(de)手段,因此需要(yào / yāo)充分利用。

作爲(wéi / wèi)電商系統的(de)設計者,我們需要(yào / yāo)把促銷規則的(de)變化和(hé / huò)複雜性控制在(zài)促銷模塊内部,不(bù)能因爲(wéi / wèi)一(yī / yì /yí)個(gè)促銷模塊而(ér)導緻整個(gè)電商系統都變得非常複雜,否則設計和(hé / huò)實現将會很難。

一(yī / yì /yí)種可行的(de)做法是(shì),把促銷模塊與其他(tā)模塊的(de)接口設計得相對簡單和(hé / huò)固定,這(zhè)樣系統的(de)其他(tā)模塊就(jiù)不(bù)會因爲(wéi / wèi)新的(de)促銷規則改變而(ér)随之(zhī)進行改變。

在(zài)創建訂單時(shí),訂單模塊需要(yào / yāo)把商品和(hé / huò)價格信息傳給促銷模塊,促銷模塊返回一(yī / yì /yí)個(gè)可以(yǐ)使用的(de)促銷列表,用戶選擇對應的(de)促銷和(hé / huò)優惠,訂單模塊把商品、價格、促銷優惠等信息,再次傳給促銷模塊,促銷模塊再返回促銷之(zhī)後的(de)價格。在(zài)最終生成的(de)訂單中,系統隻需要(yào / yāo)記錄訂單使用了(le/liǎo)哪幾種促銷規則,以(yǐ)及最終的(de)促銷價格就(jiù)可以(yǐ)了(le/liǎo)。

這(zhè)樣,無論促銷模塊如何變化,訂單和(hé / huò)其他(tā)模塊的(de)業務邏輯都不(bù)需要(yào / yāo)随之(zhī)改變。

至此,我們就(jiù)完成了(le/liǎo)一(yī / yì /yí)個(gè)電商系統的(de)概要(yào / yāo)設計,大(dà)家對電商系統應該也(yě)有了(le/liǎo)一(yī / yì /yí)個(gè)初步的(de)了(le/liǎo)解。


03 小結

下面就(jiù)來(lái)回顧一(yī / yì /yí)下一(yī / yì /yí)個(gè)電商系統的(de)設計中所包含的(de)核心要(yào / yāo)點。

首先,電商系統面向的(de)角色是(shì):用戶、運營人(rén)員和(hé / huò)管理者。這(zhè)三個(gè)角色對電商系統的(de)需求是(shì):用戶通過系統來(lái)購物,運營人(rén)員負責商品的(de)銷售,管理者關注系統中的(de)經營數據。

電商系統最核心的(de)流程是(shì)用戶購物的(de)流程,購物流程從用戶浏覽選購商品開始,加購、下單、支付、運營人(rén)員發貨、用戶确認收貨,至此電商系統的(de)購物流程結束。

細化這(zhè)個(gè)流程之(zhī)後,我們可以(yǐ)分析出(chū)支撐這(zhè)個(gè)流程的(de)核心功能模塊:商品、訂單、購物車、支付和(hé / huò)庫存。除此之(zhī)外,一(yī / yì /yí)個(gè)完整的(de)電商系統還包括促銷、用戶、賬戶、搜索推薦和(hé / huò)報表這(zhè)些必備的(de)功能模塊。

作爲(wéi / wèi)一(yī / yì /yí)名開發者,在(zài)做需求分析的(de)時(shí)候,需要(yào / yāo)把握的(de)一(yī / yì /yí)個(gè)要(yào / yāo)點是(shì):不(bù)要(yào / yāo)一(yī / yì /yí)上(shàng)來(lái)就(jiù)設計功能,而(ér)是(shì)要(yào / yāo)先理清業務需求。這(zhè)也(yě)是(shì)本文反複強調的(de)兩個(gè)問題:這(zhè)個(gè)系統是(shì)給哪些人(rén)用的(de)?他(tā)們分别用這(zhè)個(gè)系統來(lái)解決什麽問題?這(zhè)樣就(jiù)可以(yǐ)确保做出(chū)來(lái)的(de)系統大(dà)體上(shàng)不(bù)會偏離用戶的(de)預期。

最後,在(zài)講解系統功能模塊劃分的(de)時(shí)候,介紹了(le/liǎo)一(yī / yì /yí)個(gè)能夠有效降低系統複雜度的(de)設計經驗。那就(jiù)是(shì),如果系統業務是(shì)複雜而(ér)多變的(de),那麽請盡量識别出(chū)這(zhè)部分複雜業務的(de)邊界,将複雜業務控制在(zài)一(yī / yì /yí)個(gè)模塊内部,從而(ér)避免将這(zhè)種複雜度擴散到(dào)整個(gè)系統中去。



來(lái)源:大(dà)數據DT