继上次立下Flag啪啪打脸后,这次准备再玩个更大的——记录从零开发博客系统
痛定思痛
去年在博客写了要完成的目标及要读的书,到年底一看,果不其然都没做到。羞愧难当之际就把之前的博客给删了,经过一年的学习,现在需要对自己提出更高的要求了。记录自己完成开发博客的全过程,同时也希望能给路过的人一点启发和帮助。当然,也希望看到的小伙伴能够指出我的不足。
程序员的成长我想应该是在不断学习、实践和总结中完成的,而我的不足我自己也想过,光实践,不总结。每次学习过后总是不想再复习,可能是无法面对自己学过之后又不会的尴尬。我不知道别人有没有这样的情绪,在自己完成难度较高和较复杂的问题后,总是不想再做同样的事了。关于这个问题我自己也思考过,可能还是不想走出自己的舒适区,不想再让自己面对困难了。
关于写博客
一方面可以总结自己学习的知识,学习的过程真的是很枯燥,尤其是在工作中用不上,无法给自己正向的反馈。有时候甚至会产生自我怀疑,我学的东西真的有用么?我学了半天平时也用不上,过不久又会忘记,那我学的还有什么意义呢?这些问题总是慢慢蚕食着我的决心,但我希望这一次可以坚持下去实现自己的成为全栈架构师的理想。写作总结的另一方面不仅可以提升自己表达能力,而且又能给别人提供一些帮助。对于在平时的工作中,我总觉的自己说的话特别啰嗦,说话总带有很多无用的表述并且总是添加“可能”、“大概”、“也许”、“左右”等不确定的话。希望可以通过写博客让自己表达更有条理,内容更加丰富明确。
关于从零开发博客系统
对于博客系统我想应该业务逻辑简单清楚,使用的技术应该也不是特别复杂。我希望把开发的过程中每阶段遇到的技术点总结成一篇或者一系列新的博客,而系统也会随着学习总结而不断演进。
系统需求
- 博主后台
- 用户管理 :因为博客本身应该不涉及注册,但是在评论或留言中设有可匿名评论和添加用户名邮箱密码等注册内容,方便再次浏览交流。
- 博客管理:
- 新增博客
- 已发布 :可设置排序、是否置顶、是否需要密码浏览(看到WordPress里有这个功能,可能对我来说没什么卵用)
- 草稿箱
- 垃圾箱
- 评论管理
- 分类管理
- 标签管理(或者之后可以增加针对的专栏系列)
- 关于自己
- 用户前端
- 首页
- 博客详情页面
- 发布博客时间线
- 分类页面
- 标签归纳
- 关于自己
技术选型和开发模式
目前构想的开发应该是前后端分离开发。架构也会从单体到微服务进行演变。相关技术虽然大多都使用过,但是感觉没有形成自己的知识体系,希望在架构演进中总结归纳。虽然对于个人博客来说用应该不需要后续复杂技术但是还是希望可以整合尽可能多的技术。
单体架构 -> 集群架构 -> 微服务架构
- 单体架构
- 前端
- vue.js
- element
- 后端
- springboot +spring mvc +mybatis
- 数据库
- mysql
- 部署
- nginx
- tomcat
- 前端
- 集群架构新增
- redis
- 消息队列
- ES 搜索
- 分布式文件
- 日志收集
- 微服务
- 系统微服务化
- spring cloud
- 容器化部署 docker k8s
系统数据库设计
- article(文章表)
- article_comments(文章评论表)
- article_image(文章图片表)
- article_param(文章参数表)
- carousel(首页轮播图)
- category(分类)
- tags(标签)
-
users(用户表)
数据库设计
工程创建及框架整合
-
工程创建
-
使用maven构建聚合工程框架
创建聚合工程 - 删除项目中src文件夹,聚合工程不编写代码在子工程内编写
- 根据功能创建不同子工程
- api(项目使用的api)
- common(公共使用)
- mapper (数据访问)
- pojo (实体类)
-
service (具体业务处理)
创建子工程*
-
查看父工程中pom文件内是否已经将子工程全部关联,将packaging标签修改为pom
查看父工程的pom文件
-
-
框架整合
- 添加springboot parent,可提供引用管理功能,能够自动依赖获取版本不必在依赖版本处填写具体版本。能够识别application.yml文件,支持profile-specific类型的文件(在不同环境下使用的配置文件)等
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
* 添加依赖
* spring-boot-starter
* mysql
* mybatis
* tk.mybatis(通用mapper,可简化开发。使用mybatis-plus也可以)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!— <exclusions>—>
<!— <exclusion>—>
<!— <groupId>org.springframework.boot</groupId>—>
<!— <artifactId>spring-boot-starter-logging</artifactId>—>
<!— </exclusion>—>
<!— </exclusions>—>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!— mybatis —>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
</dependencies>
添加依赖后可通过 mybatis-generator (这里应该加个连接,指向一篇如何使用mybatis-generator自动生成代码 的文章)将数据库中表自动生成pojo,mapper 。这样就把开发系统的基本框架搭建起来了,之后会一步一步添加内容。
下篇应该还会整合几个框架,比如swagger2、数据层框架、日志框架等,还有系统设计的一些讨论,比如Restful api设计,自定义响应数据结构等。
网友评论