這(zhè)10個功能(néng)模塊,手把手教你從零設計電商系統
2022-01-23
新公司很快就(jiù)成(chéng)立了,你成(chéng)了新公司的CTO。關于改變世界,目前唯一能(néng)确定的是,首先要做一個電商系統。具體要做成(chéng)什麼(me)樣,目前還(hái)不清楚。你需要與老闆讨論業務需求。
你:“咱們要做的業務模式是C2C、B2C還(hái)是B2B呢?”
老闆:“什麼(me)B?什麼(me)C?我不懂你說(shuō)的那些技術名詞。”
你:“這(zhè)麼(me)說(shuō)吧,你要做一個某寶網,還(hái)是某東網,還(hái)是某848網呢?”
老闆:“不都(dōu)是一樣的嗎?它們之間有什麼(me)區别?你趕緊做一個出來我看看不就(jiù)知道(dào)了?!”
故事(shì)發(fā)展到這(zhè)裡(lǐ),作爲程序員的你是不是有一種(zhǒng)似曾相識的感覺?現實就(jiù)是,需求永遠不明确,永遠在變化,唯一不變的隻有變化。優秀的程序員适應變化,并且擁抱變化。在需求還(hái)不太明确的情況下,比較可行的方案就(jiù)是,首先搭建不太會(huì)發(fā)生變化的核心系統,然後(hòu)盡量簡單地實現一個最小化的系統,後(hòu)續再逐步叠代和完善。接下來,我們一起(qǐ)設計這(zhè)個電商的核心系統。遵照軟件工程的一般規律,我們先從需求階段開(kāi)始。那麼(me),需求分析應該如何做呢?理想情況下,系統分析師或産品經(jīng)理應該負責完成(chéng)需求分析的任務。但是,現實中絕大多數情況下,你得到的所謂的“需求”,很有可能(néng)就(jiù)是一兩(liǎng)句話。需求分析的工作最終往往是由開(kāi)發(fā)者完成(chéng)的。很多項目交付以後(hòu),仍需要不斷地進(jìn)行修改和變更,用戶不滿意,開(kāi)發(fā)者也很痛苦,造成(chéng)這(zhè)個問題的根本原因其實就(jiù)是缺失了需求分析的步驟。所以,爲了後(hòu)續工作能(néng)夠順利開(kāi)展,每位開(kāi)發(fā)者都(dōu)應該掌握一些用于需求分析的方法。那麼(me),開(kāi)發(fā)者進(jìn)行需求分析時(shí)應該做些什麼(me)呢?這(zhè)裡(lǐ)先不介紹那些做需求分析的方法和理論,隻告訴你最重要、最關鍵的一個點:不要一上來就(jiù)設計功能(néng),而是先明确下面(miàn)這(zhè)兩(liǎng)個問題的答案。
- 這(zhè)個系統(或者功能(néng))是給哪些人用的?
- 這(zhè)些人使用這(zhè)個系統是爲了解決什麼(me)問題?
這(zhè)兩(liǎng)個問題的答案,我們稱之爲業務需求。那麼(me),對(duì)于我們將(jiāng)要設計的電商系統,其業務需求又是什麼(me)呢?如果大家很熟悉電商的業務,那麼(me)回答這(zhè)兩(liǎng)個問題應該很容易。第一個問題,電商系統是給哪些人用的?首先是買東西的人,即“用戶”;其次是賣東西的人,即“運營”;還(hái)有一個非常重要的角色就(jiù)是出錢的人,即“管理者”(請記住,在設計任何一個系統的時(shí)候,管理者的意見都(dōu)是非常重要的)。綜上所述,電商系統是面(miàn)向(xiàng)用戶、運營和管理者開(kāi)發(fā)的。第二個問題,用戶、運營和管理者使用電商系統分别想要解決什麼(me)問題?這(zhè)個也很容易回答,用戶爲了買東西,運營爲了賣東西,管理者需要通過(guò)系統了解自己所得的收益。這(zhè)兩(liǎng)個問題的答案,或者說(shuō)業務需求,稍加細化後(hòu),可以用圖1-1進(jìn)行清晰的表述。圖1-1在UML(統一建模語言)中稱爲用例圖(Use Case),是我們進(jìn)行需求分析的時(shí)候所要畫的第一張圖。用例圖可用于回答業務需求中的兩(liǎng)個關鍵問題,即這(zhè)個系統給誰用?他們用這(zhè)個系統是爲了解決什麼(me)問題?一般來說(shuō),業務需求與我們要設計的系統關系不大。爲什麼(me)這(zhè)麼(me)說(shuō)呢?因爲我們將(jiāng)圖1-1中的用例,放在傳統的商業企業(比如,一個小雜貨鋪、一個線下實體商場或商店,或者一個做電視購物的公司)中也是适用的,所以,做業務需求的主要目的是理清楚業務場景是怎樣的。下面(miàn)就(jiù)來分析電商系統的業務流程。很顯然,電商系統最主要的業務流程,一定是購物流程。購物流程很簡單,具體流程如圖1-2所示。所有電商的購物流程幾乎都(dōu)是如此,下面(miàn)就(jiù)來分析一下這(zhè)個流程。流程從用戶選購商品開(kāi)始,用戶首先在App中浏覽商品,找到心儀的商品之後(hòu),把商品添加到購物車,選完商品之後(hòu),打開(kāi)購物車,提交訂單。下單結算之後(hòu),用戶就(jiù)可以支付了。支付成(chéng)功後(hòu),運營人員會(huì)爲已經(jīng)支付的訂單發(fā)貨,爲用戶郵寄相應的商品。最後(hòu),用戶收到商品并确認收貨。至此,一個完整的購物流程就(jiù)結束了。接下來,我們再進(jìn)一步細化電商購物的業務流程,看一下電商系統是如何實現該流程的。圖1-3所示的是細化之後(hòu)的電商系統購物流程時(shí)序圖(Sequence Diagram)。下面(miàn)就(jiù)來詳細講解圖1-3所示的時(shí)序圖中的各個步驟。
- 用戶浏覽商品,這(zhè)個步驟需要通過(guò)一個商品模塊來展示商品詳情頁,用戶可以從中獲取所浏覽商品的詳細介紹和價格等信息。
- 然後(hòu),用戶把選好(hǎo)的商品加入購物車,這(zhè)個步驟需要使用一個購物車模塊來維護用戶購物車中的商品。
- 接下來是用戶下單,這(zhè)個步驟需要基于一個訂單模塊來創建新訂單。訂單創建好(hǎo)了之後(hòu),系統需要把訂單中的商品從購物車中删減掉。
- 訂單創建完成(chéng)後(hòu),系統需要引導用戶付款,即發(fā)起(qǐ)支付流程,可通過(guò)一個支付模塊來實現支付功能(néng),用戶成(chéng)功完成(chéng)支付之後(hòu),系統需要把訂單的狀态變更爲“已支付”。
- 成(chéng)功支付之後(hòu),運營人員就(jiù)可以發(fā)貨了,發(fā)貨之後(hòu),系統需要扣減對(duì)應商品的庫存數量,這(zhè)個步驟需要基于一個庫存模塊來實現庫存數量的變更,同時(shí)系統還(hái)需要把訂單狀态變更爲“已發(fā)貨”。
- 最後(hòu),用戶收到商品,在系統中确認收貨,系統需要把訂單狀态變更爲“已收貨”,流程結束。
這(zhè)個流程涉及5大功能(néng)模塊,即商品、購物車、訂單、支付和庫存,這(zhè)5大模塊就(jiù)是一個電商系統中的核心功能(néng)模塊。當然,僅有這(zhè)5個模塊是不夠的,因爲我們隻分析了“購物”這(zhè)個最主要的流程,并沒(méi)有完全涵蓋業務需求中的全部用例,比如,運營人員進(jìn)貨、管理者查看報表等還(hái)沒(méi)有覆蓋到。相比購物流程,剩下的幾個用例和流程都(dōu)相對(duì)簡單一些,我們可以采用同樣的方法來分析其他的功能(néng)模塊。這(zhè)裡(lǐ)將(jiāng)省略分析過(guò)程,直接給出我們所要實現的電商系統的功能(néng)模塊劃分(如圖1-4所示)。圖1-4使用了UML中的包圖(Package Diagram)來表示電商系統的功能(néng)模塊。整個系統按照功能(néng),可以劃分爲10個模塊,除了購物流程中涉及的商品、訂單、購物車、支付和庫存這(zhè)5個模塊之外,還(hái)補充了促銷、用戶、賬戶、搜索推薦和報表這(zhè)5個模塊,這(zhè)些都(dōu)是構建一個電商系統必不可少的功能(néng)模塊。下面(miàn)就(jiù)來逐一說(shuō)明每個模塊需要實現的功能(néng)。
- 支付:負責與系統内外部的支付渠道(dào)對(duì)接,實現支付功能(néng)。
- 用戶:維護系統的用戶信息,注意,用戶模塊是一個業務模塊,一般不負責用戶的登錄和認證,這(zhè)是兩(liǎng)個完全不同的功能(néng)。
- 搜索推薦:提供商品搜索功能(néng),并負責各種(zhǒng)商品列表頁和促銷頁的組織和展示,簡單地說(shuō)就(jiù)是,搜索推薦決定用戶優先看到哪些商品。
- 報表:實現數據統計和分析功能(néng),生成(chéng)報表,爲管理者進(jìn)行經(jīng)營分析和決策提供數據信息。
這(zhè)裡(lǐ)需要特别說(shuō)明的是,促銷模塊是電商系統中最複雜的一個模塊。各種(zhǒng)優惠券、滿減、返現等促銷規則,每一條都(dōu)非常複雜,再加上這(zhè)些規則往往還(hái)要疊加計算,有時(shí)甚至會(huì)複雜到連制定促銷規則的人都(dōu)算不清楚。所有電商公司無一例外都(dōu)曾因爲促銷規則制定失誤,導緻商品實際售價遠低于成(chéng)本價,使公司受到一定程度的損失。盡管如此,五花八門的促銷活動依然是提升銷量最有效的手段,因此需要充分利用。作爲電商系統的設計者,我們需要把促銷規則的變化和複雜性控制在促銷模塊内部,不能(néng)因爲一個促銷模塊而導緻整個電商系統都(dōu)變得非常複雜,否則設計和實現將(jiāng)會(huì)很難。一種(zhǒng)可行的做法是,把促銷模塊與其他模塊的接口設計得相對(duì)簡單和固定,這(zhè)樣系統的其他模塊就(jiù)不會(huì)因爲新的促銷規則改變而随之進(jìn)行改變。在創建訂單時(shí),訂單模塊需要把商品和價格信息傳給促銷模塊,促銷模塊返回一個可以使用的促銷列表,用戶選擇對(duì)應的促銷和優惠,訂單模塊把商品、價格、促銷優惠等信息,再次傳給促銷模塊,促銷模塊再返回促銷之後(hòu)的價格。在最終生成(chéng)的訂單中,系統隻需要記錄訂單使用了哪幾種(zhǒng)促銷規則,以及最終的促銷價格就(jiù)可以了。這(zhè)樣,無論促銷模塊如何變化,訂單和其他模塊的業務邏輯都(dōu)不需要随之改變。至此,我們就(jiù)完成(chéng)了一個電商系統的概要設計,大家對(duì)電商系統應該也有了一個初步的了解。下面(miàn)就(jiù)來回顧一下一個電商系統的設計中所包含的核心要點。首先,電商系統面(miàn)向(xiàng)的角色是:用戶、運營人員和管理者。這(zhè)三個角色對(duì)電商系統的需求是:用戶通過(guò)系統來購物,運營人員負責商品的銷售,管理者關注系統中的經(jīng)營數據。電商系統最核心的流程是用戶購物的流程,購物流程從用戶浏覽選購商品開(kāi)始,加購、下單、支付、運營人員發(fā)貨、用戶确認收貨,至此電商系統的購物流程結束。細化這(zhè)個流程之後(hòu),我們可以分析出支撐這(zhè)個流程的核心功能(néng)模塊:商品、訂單、購物車、支付和庫存。除此之外,一個完整的電商系統還(hái)包括促銷、用戶、賬戶、搜索推薦和報表這(zhè)些必備的功能(néng)模塊。作爲一名開(kāi)發(fā)者,在做需求分析的時(shí)候,需要把握的一個要點是:不要一上來就(jiù)設計功能(néng),而是要先理清業務需求。這(zhè)也是本文反複強調的兩(liǎng)個問題:這(zhè)個系統是給哪些人用的?他們分别用這(zhè)個系統來解決什麼(me)問題?這(zhè)樣就(jiù)可以确保做出來的系統大體上不會(huì)偏離用戶的預期。最後(hòu),在講解系統功能(néng)模塊劃分的時(shí)候,介紹了一個能(néng)夠有效降低系統複雜度的設計經(jīng)驗。那就(jiù)是,如果系統業務是複雜而多變的,那麼(me)請盡量識别出這(zhè)部分複雜業務的邊界,將(jiāng)複雜業務控制在一個模塊内部,從而避免將(jiāng)這(zhè)種(zhǒng)複雜度擴散到整個系統中去。
來源:大數據DT