最近,我在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项目全套学习教程连载中,关注公众号第一时间获取。