项目搭建好了之后是不是可以编码了呢?

等等不要着急,我们是不是应该先设计一下?比如博客的功能等?

博客设计

先做个简单的个人博客,因为是个人版,所以可以省略注册、登录这些功能,表结构也可以简单一点。

基础功能:添加博文、显示博文、博文列表+查询+分页、讨论列表和添加讨论。

虽然功能弱了一点,但是麻雀虽小五脏俱全,vite2 和 vue3 的基础用法也可以体现一些。

功能设计

是不是做成图更明显一些?

代码设计

model设计

model代码

先来看看 model 的代码。

/src/model/blogModel.js

  1. /**
  2. * 显示博文用,建表用
  3. * @returns 博文的全部的属性
  4. */
  5. export const blog = () => {
  6. return {
  7. // id: 0,
  8. title: '', // 这是一个博客标题
  9. groupId: 0, // 分组ID
  10. addTime: new Date(), // 添加时间
  11. introduction: '', // 这是博客的简介
  12. concent: '', // 这是博客的详细内容
  13. state: 1, // 1:草稿;2:发布;3:删除
  14. viewCount: 0, // 浏览量
  15. agreeCount: 0, // 点赞数量
  16. discussCount: 0 // 讨论数量
  17. }
  18. }
  19. /**
  20. * 表单用的博文,绑定表单用。
  21. * * title:文章标题
  22. * @returns 添加博文需要的属性
  23. */
  24. export const blogForm = () => {
  25. return {
  26. // id: new Date().valueOf(),
  27. title: '', // 这是一个博客标题
  28. addTime: new Date(), // 添加时间
  29. introduction: '', // 这是博客的简介
  30. concent: '', // 这是博客的详细内容
  31. state: 1 // 1:草稿;2:发布;3:删除
  32. }
  33. }
  34. /**
  35. * 首页用的博文列表,按需设置字段
  36. * @returns 博文列表
  37. */
  38. export const blogList = () => {
  39. return {
  40. id: 0,
  41. title: '', // 这是一个博客标题
  42. addTime: '', // 添加时间
  43. introduction: '', // 这是博客的简介
  44. viewCount: 0, // 浏览量
  45. agreeCount: 0, // 点赞数量
  46. discussCount: 0 // 讨论数量
  47. }
  48. }
  49. /**
  50. * 编辑博文用的列表
  51. * @returns 文章标题列表
  52. */
  53. export const articleList = () => {
  54. return {
  55. id: 0,
  56. title: '', // 这是一个博客标题
  57. addTime: '', // 添加时间
  58. viewCount: 0, // 浏览量
  59. agreeCount: 0, // 点赞数量
  60. discussCount: 0 // 讨论数量
  61. }
  62. }
  63. /**
  64. * 建表用的讨论
  65. * @returns 讨论表
  66. */
  67. export const discuss = () => {
  68. return {
  69. // id: 0,
  70. blogId: 0,
  71. discusser: '' , // 昵称
  72. addTime: new Date(), // 时间
  73. concent: '', // 内容
  74. agreeCount: 0
  75. }
  76. }
  77. /**
  78. * @returns 讨论的model
  79. */
  80. export const discussList = () => {
  81. return {
  82. id: 0,
  83. discusser: '' , // 昵称
  84. addTime: '', // 时间
  85. concent: '', // 内容
  86. agreeCount: 0
  87. }
  88. }

原生js是不需要先定义对象的,只是我感觉把需要的对象放在一起集中管理一下,还是比较方便的,虽然这么做用处不大,因为不是ts,没有任何强制性也没有检查机制,但是还是想集中管理一下。

状态设计

状态嘛,简单地说就是多个组件共享的数据,当然这么说不够严谨。

/src/model/blogState.js

  1. import { inject } from "vue"
  2. export const blogState = {
  3. currentGroupId: 0, // 选择的分组ID。0:没选择
  4. currentArticleId: 0, // 选择的文章ID。
  5. editArticleId: 0, // 当前修改的文章ID
  6. findQuery: { }, // 查询条件
  7. page: { // 分页参数
  8. pageTotal: 100,
  9. pageSize: 2,
  10. pageIndex: 1,
  11. orderBy: { id: false }
  12. },
  13. isReloadDiussList: false
  14. }
  15. /**
  16. * 状态的管理
  17. * * 获取状态
  18. * * 设置当前选择的分组
  19. * * 设置当前选择的文章
  20. * * 设置当前编辑的文章
  21. */
  22. export default function blogStateManage() {
  23. // 先把状态取出来,否则在 function 里面无法读取。
  24. const state = inject('blogState')
  25. // 子组件里面获取状态
  26. const getBlogState = (id) => {
  27. return state
  28. }
  29. // 设置当前选择的分组
  30. const setCurrentGroupId = (id) => {
  31. state.currentGroupId = id
  32. }
  33. // 设置当前编辑的文章
  34. const setEditArticleId = (id) => {
  35. state.editArticleId = id
  36. }
  37. // 设置更新讨论列表
  38. const setReloadDiussList = () => {
  39. state.isReloadDiussList = !state.isReloadDiussList
  40. }
  41. return {
  42. setReloadDiussList, // 设置更新讨论列表
  43. getBlogState, // 获取状态
  44. setEditArticleId, // 设置当前编辑的文章
  45. setCurrentGroupId // 设置当前选择的分组
  46. }
  47. }

算是一个简易的状态管理吧,先定义一下需要的状态,在main里面注入状态,然后用 inject 提取状态,再写几个设置状态的函数,基本就可以搞定了。

后续想写成插件的形式,当然会完善一些功能,不会这么单薄。

感觉 Vuex 有点太厚重了,这里也不需要那么强大的功能,所以就自己实现了一个简单的。

未完待续,后面更精彩。

源码

https://gitee.com/naturefw/vue3-blog

在线演示

https://naturefw.gitee.io/vue3-blog

做个开源博客学习Vite2 + Vue3 (三)博客设计和代码设计的更多相关文章

  1. 做个开源博客学习Vite2 + Vue3 (一)搭建项目

    前言 不会 webpack,遇到报错就一头雾水,完全不知道怎么办,而且体积还大速度还慢. 所以尤雨溪做了 vite 后就很向往,只是知道自己水平有限还是等大佬先趟趟坑,等差不多了在跳. 现在vite2 ...

  2. 做个开源博客学习Vite2 + Vue3 (四)实现博客功能

    我们再来看一下管理类的设计. Composition API,就是组合API的意思,那么是不是应该把js代码分离出来,做成独立的管理类的形式呢? 这样代码可以更整洁一些,主要是setup里面的代码就不 ...

  3. css扁平化博客学习总结(三)header代码实现

    页头.banner.正文.页脚的宏观布局 1.布局顺序的重要性: 由大到小,着眼最大的部分,慢慢细分. <body> <header><!-- 页头开始 --> & ...

  4. MySQL 学习笔记(三):完整性和触发器设计

    (一)完整性设计 方法一.在设计表时定义约束 删除数据库school,建立新数据库school1 drop database school; create database school; use s ...

  5. FPGA一个博客学习

    FPGA一个博客学习 http://bbs.ednchina.com/BLOG_PERSONALCAT_100185_2001619.HTM

  6. 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客

    多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署

  7. Do Now 一个让你静心学习的APP——团队博客

    Do Now 一个让你静心学习的APP 来自油条只要半根团队的智慧凝聚的产物! 团队博客总目录: 团队作业第一周 团队作业第二周 Do Now -- 团队冲刺博客一 Do-Now-团队Scrum 冲刺 ...

  8. 我的第一篇博客-学习书写markdown

    Markdown学习(标题:井号+空格+标题名字 回车 ) 标题: 二级标题## 空格+名字 三级标题### 空格+名字 四级标题#### 空格+名字 五级标题##### 空格+名字 六级标题#### ...

  9. 开源项目live555学习心得

      推荐:伊朗美女找丈夫比找工作难女人婚前一定要看清三件事 × 登录注册   疯狂少男-IT技术的博客 http://blog.sina.com.cn/crazyboyzhaolei [订阅][手机订 ...

随机推荐

  1. 程序员如何在VsCode上看基金?

    一 我是一个程序员. 代码是我的禁锢,基金是我的自由. 打破禁锢,奔向自由,也许只差几个定投. 有人说,买基金一定要心态好,要学会风险对冲,把8成的钱全仓买基金,剩余2成买意外身亡险,基金大涨就赚,基 ...

  2. Python3.x 基础练习题100例(61-70)

    练习61: 题目: 打印出杨辉三角形. 程序: if __name__ == '__main__': a = [] for i in range(10): a.append([]) for j in ...

  3. Hi3559AV100的VI细节处理说明

    因为项目后期涉及到MPP平台下的VI接口,现把有关视频输入VI模块的实现细节总结,也方便大家进一步了解. 1.整体概述 视频输入(VI)模块实现的功能:通过 MIPI Rx(含 MIPI 接口.LVD ...

  4. 抽一根烟的时间学会.NET Core 操作RabbitMQ

    什么是RabbitMQ? RabbitMQ是由erlang语言开发的一个基于AMQP(Advanced Message Queuing Protocol)协议的企业级消息队列中间件.可实现队列,订阅/ ...

  5. 初窥MyBatis-普通的CRUD操作

    编写接口 编写对应的Mapper.xml中的sql语句 测试(增删改需要提交事务) <mapper namespace="com.perwrj.dao.UserMapper" ...

  6. JS table排序

    <html lang="en"> <head> <meta charset="UTF-8"> <meta http-e ...

  7. slickgrid ( nsunleo-slickgrid ) 2 修正区域选择不能跨冻结列的问题

    slickgrid( nsunleo-slickgrid )  2 修正区域选择不能跨冻结列的问题 周六的时候,留了个小小的尾巴,区域选择的问题进做到了定位: 问题原因,在slickgrid启动冻结之 ...

  8. 键盘--扫描码--ASCII码--显示器上的字符

    在上一篇,我讲了键盘操作会产生扫描码以及如何解析Pause键和Print Screen键的扫描码. 在这一篇,我会说清楚"键盘上的输入为什么会出现在显示器上". 极简版 我们敲击键 ...

  9. unittest系列(三)unittest用例如何执行

    在前面的分享中,我们分别讲了unittest的相关流程以及相关断言,那么很多人,都会问了unittest的用例,应该如何执行呢,这次,我们就来看看,unittest用例如何执行.首先,我们可以使用py ...

  10. 让JS代码Level提升的忍者秘籍(实用)

    本文章共2377字,预计阅读时间5-10分钟. 前言 没有前言. 你准备好成为同事眼中深藏不露.高深莫测.阳光帅气的前端开发了吗? 那就开始吧! 本文秉承宗旨:代码实用与逼格并存. 提升JS代码Lev ...