
有網友花了兩個月時間做了一個 b2c 商城,技術堆疊是 sass、jquery、thinkphp,一套摸索下來后,遇到非常多的問題,例如:對專案開發流程等沒概念、不知道去哪里查找相關資料,因此他提出來幾個問題:
專案開發流程的基本組成部分有哪些?
如何在初期確定專案整體的運作模型?
如何設計資料模型?
以下是這位網友在專案初期的一些腦圖,由于設計問題,其中退貨、優惠券、折扣部分最終并未完成:






針對這些問題,淘系技術架構師勇劍同學寫出本文一一解答,
專案開發流程的基本組成部分有哪些?
對于專案開發流程,我的理解,與這位網友實際上大致上是差不多的,不過一般團隊里面,都會有業務、產品、服務端、前端、客戶端、測驗等角色,所以相對整體的溝通成本會高很多,整體的流程大致上是:需求評審、技術方案評審/專案排期、測驗用例評審、開發、測驗、功能預演、發布上線、線上灰度/放量,
實際上這位網友所提到的 “設計整體業務流程” 這一步應該是在技術介入之前就要由產品與業務提前溝通確認好的,“設計資料模型” 應該歸屬到技術方案這一步里面,是其中的一部分,
整個流程對于技術開發同學來說,重點需要關注需求評審、技術方案設計這兩大部分,簡單談一下我的一些看法,
關于需求,之前看過一段馬斯克的作業理念介紹,覺得非常不錯,講的是需求迭代的程序,建議按照下面五步:
制定需求的時候,讓你的需求別那么蠢(哈哈,也就是希望需求盡量合理,不要做出來了發現沒什么用)
嘗試洗掉部件或程序,這一步可以讓你知道最核心的部件與程序是什么,
優化,只有到了第三步,才是優化,不要第一步就優化,讓你的優化集中在必要的部件與程序上,這是很多工程師容易搞錯的地方,
加速前三部回圈的時間,你的動作太慢了,更快一點~,在這前,不要加速
最后一步是自動化
前三步對于我們在一些業務需求的制定上,可以提供一些比較好的參考,在實際專案程序中,也讓我們思考什么是我們的核心需求,把有限的人力集中到我們必須要做的事情上面去,拿到更好的成果,
另外一點是關于技術方案設計,我覺的是沒有一個固定的模版的,重點是要講清楚在整個技術設計程序中更需要關注的核心技術問題,包括但不限于技術選型、業務互動時序圖、物體狀態機、資料建模、應用/物理/業務架構,以及高可用保障、穩定性風險等等,
如何在初期確定專案整體的運作模型?即對專案整體的前期設計?
這個問題的本質實際上是一個領域建模的問題,回到題主的第一張圖,在領域建模的時候,我的理解是,先要理清我們業務的核心物體,也就是領域物體,在這張圖里面,我們可以清晰看出三部分:用戶、商品、訂單(當然也可以更細化到一些物體:購物車、物流單、評價等等,這里只是簡單舉例),體現在設計上,整個業務的應用架構必然需要三大中心:用戶中心、商品中心、訂單中心,當模型確認之后,模型自身的行為以及模型之間的關系也就隨之確定,

題主的這個圖,看主要是用來介紹整體一些業務流程,包括:物體、用戶行為、邏輯判斷等等,對于這些建議是通過“時序圖”來描述相對會更好一點,可以相對更加清晰的來描述系統、物件、物件與系統的互動行為,
簡單畫了一下用戶與幾個系統的關系與互動,可以看出需要哪些系統、這些系統需要哪些能力、用戶如何與這些系統之間完成互動,

PS:這里畫的不太全,忽略了所有例外邏輯的處理以及資料一致性問題,包括在用戶建單之后,后續的支付流程、以及后續訂單的狀態機流程這里都沒在詳細畫了,只是簡單給個 Demo,
關于“用戶中心”這塊,注冊/登錄/登出/修改個人資訊 這幾大部分維護在用戶中心是 OK 的,但是優惠券、訂單記錄查詢、訂單評論這幾部分放在這里感覺不太合適,優惠券屬于營銷域,應該是歸屬于一個營銷域的“卡券”(coupon)子系統,由該系統提供根據用戶 ID 查詢優惠券的能力即可,訂單記錄及查詢維護在“訂單中心”會更合適一些,至于“評論”,也可以放到一個單獨的子系統里面去,

簡而言之就是根據業務訴求確定系統的領域模型,再對各個領域進行職責劃分、功能拆解,之后就是逐漸完善各個子域了,整個專案的架子搭好之后,后續的功能擴展也會相對比較簡單,
如何設計資料模型?或者說怎么設計資料表?
資料庫的設計第一步首先要搞清業務訴求,有時候不同的業務需求會導致資料建模存在較大的差異,這一點是我們需要在做設計之前明確的,
之后就是根據業務形態,確定領域物體,比如電商涉及到的商品、訂單、用戶等等,商品域內又包含SPU、SKU、類目資訊等等,
題主提到的根據前端功能需求來設計資料模型,對于簡單的需求來說,是可以的,但對于復雜業務如果這樣設計,后續如果前端功能需求發生變動,那么對整個系統的改造也是災難性的,建議建立起一套穩健的領域模型,將前端需求與底層存盤做好防腐和解耦,在DB層的建模做好適當的抽象、冗余等處理,資料在系統里面通過領域物體流轉,對于頁面只是一個物體的VO渲染即可,
另外資料表的設計,需要考慮各方面因素,比如資料量的預估(是否需要分庫分表)、存盤方式(存盤技術選型)、有沒有熱點資料、預留未來擴展的可能性等等
關于 DB 建模,建議采用 ER 圖來設計,資料表的關聯關系展現的會相對清晰一些,下面是一個簡單的 Demo

關于 MySql 資料庫方面的技術,推薦一本書:《高性能MySQL》

畫圖工具
最后關于畫圖這塊,推薦幾款比較好用的作圖利器哈:
OmniGraffle:https://www.omnigroup.com/omnigraffle
draw.io:https://drawio-app.com/examples/
PlantUml:https://plantuml.com/zh/sequence-diagram
🍊橙子說
謝謝這位同學詳盡的提問
同時我們開辟淘系技術專家一對一的提問通道
掃碼查看詳情,留下你的技術問題
? 拓展閱讀


作者|勇劍
編輯|橙子君
出品|阿里巴巴新零售淘系技術


轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/303070.html
標籤:其他
下一篇:JavaScript學習一
