最近,我在Github上面開源的項目mall已經突破了20000 Star,這個項目是2018年3月份開始開發的,耗時9個月,發佈了第一個版本,一直維護至今。回想起來,仍是有諸多感慨的,下面我就談談個人項目發展的整個歷程。html
2018年3月的時候,我在Github上面閒逛,想要找一個業務和技術相結合的項目,可是發現不少項目都是以技術爲主,業務都比較簡單。因而我產生了本身寫一個業務與技術相結合的項目的想法,業務選擇了電商,由於這是一個你們比較容易理解的業務場景,同時有不少成熟的系統能夠借鑑。技術選擇了SpringBoot全家桶,由於當時SpringBoot比較火,同時本身也想學習並實踐下。前端
當時有了解到一個最小精益產品的概念,就是把一個複雜的產品進行簡化,簡化到一個只保留核心功能的產品。使用這種方法,我對一些成熟的系統功能進行簡化,最後肯定了管理後臺須要開發的功能爲商品管理、訂單管理、運營管理、促銷管理、內容管理、會員管理等功能,移動端須要開發的功能爲首頁推薦、首頁內容、個人、購物車、商品展現、訂單等功能。vue
項目業務架構圖: java
當時整理需求用到了一個叫MindMaster思惟導圖工具,首先劃分功能模塊,以後劃分每一個模塊中的功能,最後對每一個功能所要處理的數據字段進行標註。造成了一套明確需求的思惟導圖,有了它,以後的數據庫設計就容易多了!linux
當時設計的思惟導圖能夠查看這裏:mall數據庫表結構概覽ios
有了上面整理需求的思惟導圖之後,就能夠開始設計數據庫了。剛開始設計數據庫的時候,並不須要把數據庫設計的特別完善,由於等到你編碼用到時,老是要改的,只須要知足當前功能的數據存儲需求便可。說說數據庫的外鍵,數據庫表之間建議作邏輯關聯,不要設置外鍵。好比說個人項目裏面的商品表,和十幾張表都是有關聯的,要是我用外鍵的話,當商品表被鎖死了,其餘外鍵關聯的表也會被鎖死,這樣小半個數據庫都會被鎖死。再說說剛開始設計的時候是否須要添加索引,我的建議暫時不要加,等編碼的時候再加。我的推薦數據庫表使用PowerDesigner等設計工具來設計,效率高,能夠保留表與表之間的依賴關係。git
當時設計的數據庫能夠查看這裏:mall數據庫表結構概覽github
技術 | 說明 | 官網 |
---|---|---|
Spring Boot | 容器+MVC框架 | spring.io/projects/sp… |
Spring Security | 認證和受權框架 | spring.io/projects/sp… |
MyBatis | ORM框架 | www.mybatis.org/mybatis-3/z… |
MyBatisGenerator | 數據層代碼生成 | www.mybatis.org/generator/i… |
PageHelper | MyBatis物理分頁插件 | git.oschina.net/free/Mybati… |
Swagger-UI | 文檔生產工具 | github.com/swagger-api… |
Hibernator-Validator | 驗證框架 | hibernate.org/validator/ |
Elasticsearch | 搜索引擎 | github.com/elastic/ela… |
RabbitMq | 消息隊列 | www.rabbitmq.com/ |
Redis | 分佈式緩存 | redis.io/ |
MongoDb | NoSql數據庫 | www.mongodb.com/ |
Docker | 應用容器引擎 | www.docker.com/ |
Druid | 數據庫鏈接池 | github.com/alibaba/dru… |
OSS | 對象存儲 | github.com/aliyun/aliy… |
JWT | JWT登陸支持 | github.com/jwtk/jjwt |
LogStash | 日誌收集 | github.com/logstash/lo… |
Lombok | 簡化對象封裝工具 | github.com/rzwitserloo… |
固然這一堆技術,我也不是剛開發這個項目的時候就會的,有不少都是開發過程當中學會的,當時也看了不少資料,我看過的資料以下:mall學習所需知識點(推薦資料)。若是是系統學習某個技術,我推薦看書,由於書的知識體系是比較全面的,並且裏面幾乎沒有啥錯誤。可是看書也有個缺點,有些書裏面某些技術版本比較老舊,不過不用太過擔憂,由於一個流行的技術的核心不會由於版本的迭代發生太大的變化,老版本的使用方式到了新版本,絕大多數都依舊適用。redis
技術 | 說明 | 官網 |
---|---|---|
Vue | 前端框架 | vuejs.org/ |
Vue-router | 路由框架 | router.vuejs.org/ |
Vuex | 全局狀態管理框架 | vuex.vuejs.org/ |
Element | 前端UI框架 | element.eleme.io/ |
Axios | 前端HTTP框架 | github.com/axios/axios |
v-charts | 基於Echarts的圖表框架 | v-charts.js.org/ |
Js-cookie | cookie管理工具 | github.com/js-cookie/j… |
nprogress | 進度條控件 | github.com/rstacruz/np… |
提及前端技術,不少後端開發都不怎麼擅長。其實前端技術學習並非那麼難,由於如今的前端技術已經發展的很成熟了,好比Vue、React、Angular都是比較成熟的前端技術。當你前端寫多了以後,你就會發現寫前端也無非是使用使用框架,用js寫寫前端邏輯,和後端的寫邏輯沒啥大的區別。下面我來講說我是怎麼學習前端的吧,首先我肯定了我要學習的是Vue,大概花了一週看了一遍Vue的官方文檔,畢竟是國人開源的框架,文檔對國人仍是很友好的。以後選擇了一個腳手架vue-element-admin,而後大概看了一遍裏面使用的技術,對這些技術都到官方網站上面看了一遍文檔,主要仍是看到Element的文檔。以後我就拿着這個腳手架開始寫個人項目實戰了。學習編程,光靠看效果並很差,仍是要多實踐,學以至用才行!spring
爲何要設計一個移動端原型呢?主要是爲了整個項目有個完整的業務流程,同時爲下階段移動端的開發作準備。目前個人原型有完整的移動端流程,能夠完美對接後臺管理。我以爲開發也須要有必定的產品設計能力,舉個例子:要是某天老闆有個演示產品要作,叫你去作怎麼辦?你要是會設計產品原型,就只要用工具作個就行了,就不用寫一些臨時的代碼了,比開發個演示產品要省時省力的多。
移動端演示地址:http://39.98.190.128/mall-app/mainpage.html
項目起初只有一套開發環境的windows部署方案,後來加入了linux部署方案,採用的docker容器化部署,以後又加入了更方便的docker-compose部署方案。
具體方案以下:
其實作這個項目,對我來講也是一個完善自身技術棧的過程。經過這個項目,我學習到了產品、開發、運維的一系列技術,雖然不精,但都是實用的。
在2019年3月的時候,進行了一次框架升級,將SpringBoot從1.5.14版本升級到了2.1.3,同時將Elasticsearch從2.3.6版本升級到了6.2.2。
我以爲一個好的項目,須要一份完善的項目文檔,以便更多的人來學習,因而2019年5月的時候我開始完善整個項目的文檔,對整個項目的架構、業務、技術要點進行全方位的解析。
項目文檔地址:github.com/macrozheng/…
爲了方便只須要使用mall項目的技術棧來開發本身業務系統的朋友,我將mall項目中使用的技術棧抽取出來作成了一個項目骨架,對其中的業務進行精簡,只保留了核心的12張表,方便開發使用,能夠自由定製業務邏輯。
個人項目是從2018年12月,陸續有Star增加的,其實你只要用心去寫一個開源項目,老是會有人來關注的,附上一張mall項目的Star增加圖。
mall項目地址:github.com/macrozheng/…
mall項目全套學習教程連載中,關注公衆號第一時間獲取。