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

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

博客设计

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

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

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

功能设计

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

代码设计

model设计

model代码

先来看看 model 的代码。

/src/model/blogModel.js

/**
* 显示博文用,建表用
* @returns 博文的全部的属性
*/
export const blog = () => {
return {
// id: 0,
title: '', // 这是一个博客标题
groupId: 0, // 分组ID
addTime: new Date(), // 添加时间
introduction: '', // 这是博客的简介
concent: '', // 这是博客的详细内容
state: 1, // 1:草稿;2:发布;3:删除
viewCount: 0, // 浏览量
agreeCount: 0, // 点赞数量
discussCount: 0 // 讨论数量
}
} /**
* 表单用的博文,绑定表单用。
* * title:文章标题
* @returns 添加博文需要的属性
*/
export const blogForm = () => {
return {
// id: new Date().valueOf(),
title: '', // 这是一个博客标题
addTime: new Date(), // 添加时间
introduction: '', // 这是博客的简介
concent: '', // 这是博客的详细内容
state: 1 // 1:草稿;2:发布;3:删除
}
} /**
* 首页用的博文列表,按需设置字段
* @returns 博文列表
*/
export const blogList = () => {
return {
id: 0,
title: '', // 这是一个博客标题
addTime: '', // 添加时间
introduction: '', // 这是博客的简介
viewCount: 0, // 浏览量
agreeCount: 0, // 点赞数量
discussCount: 0 // 讨论数量
}
} /**
* 编辑博文用的列表
* @returns 文章标题列表
*/
export const articleList = () => {
return {
id: 0,
title: '', // 这是一个博客标题
addTime: '', // 添加时间
viewCount: 0, // 浏览量
agreeCount: 0, // 点赞数量
discussCount: 0 // 讨论数量
}
} /**
* 建表用的讨论
* @returns 讨论表
*/
export const discuss = () => {
return {
// id: 0,
blogId: 0,
discusser: '' , // 昵称
addTime: new Date(), // 时间
concent: '', // 内容
agreeCount: 0
}
} /**
* @returns 讨论的model
*/
export const discussList = () => {
return {
id: 0,
discusser: '' , // 昵称
addTime: '', // 时间
concent: '', // 内容
agreeCount: 0
}
}

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

状态设计

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

/src/model/blogState.js

import { inject } from "vue"

export const blogState = {
currentGroupId: 0, // 选择的分组ID。0:没选择
currentArticleId: 0, // 选择的文章ID。
editArticleId: 0, // 当前修改的文章ID
findQuery: { }, // 查询条件
page: { // 分页参数
pageTotal: 100,
pageSize: 2,
pageIndex: 1,
orderBy: { id: false }
},
isReloadDiussList: false
} /**
* 状态的管理
* * 获取状态
* * 设置当前选择的分组
* * 设置当前选择的文章
* * 设置当前编辑的文章
*/
export default function blogStateManage() {
// 先把状态取出来,否则在 function 里面无法读取。
const state = inject('blogState') // 子组件里面获取状态
const getBlogState = (id) => {
return state
} // 设置当前选择的分组
const setCurrentGroupId = (id) => {
state.currentGroupId = id
} // 设置当前编辑的文章
const setEditArticleId = (id) => {
state.editArticleId = id
} // 设置更新讨论列表
const setReloadDiussList = () => {
state.isReloadDiussList = !state.isReloadDiussList
} return {
setReloadDiussList, // 设置更新讨论列表
getBlogState, // 获取状态
setEditArticleId, // 设置当前编辑的文章
setCurrentGroupId // 设置当前选择的分组
}
}

算是一个简易的状态管理吧,先定义一下需要的状态,在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. 下载com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

    看别人都说在repo.maven.com下载,没想到竟然要登录 索性我直接在国内阿里云的镜像仓库下载好了,速度又快又方便 搜索aspectj 下载地址:https://maven.aliyun.com ...

  2. vue项目配置 `webpack-obfuscator` 进行代码加密混淆

    背景 公司代码提供给第三方使用,为了不完全泄露源码,需要对给出的代码进行加密混淆,前端代码虽然无法做到完全加密混淆,但是通过使用 webpack-obfuscator 通过增加随机废代码段.字符编码转 ...

  3. SpringBoot2.x中的AOP机制总结(附带demo)

    寄语:刚开始学aop的时候是大三吧,老师讲的不好,我也没学好,导致现在才有个较为清晰的认知,那个时候只知道有aop, 根部不明白aop的作用,时至今日,任然觉得aop难以咀嚼,奈何平时不用面试要用,特 ...

  4. Ctfweb(2)

    CTFwebshow(2): phps源码泄露 思路:第一次接触phps这个后缀,第一眼打开的时候是想着用御剑去扫目录,但是很遗憾没有扫到index.phps,然后用burp抓包返回包信息也没有看到端 ...

  5. MongoDB4.2 副本集扫盲说明

    说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明副本集相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 副本集的原理.搭建.应用.MongoDB中的副本集是一 ...

  6. SpringBoot项目创建与单元测试

    前言   Spring Boot 设计之初就是为了用最少的配置,以最快的速度来启动和运行 Spring 项目.Spring Boot使用特定的配置来构建生产就绪型的项目. Hello World 可以 ...

  7. Spring 的 IOC

    1. 什么是IOC IOC的好处 IOC的思想是将需要的对象通过外部传入进来,而不是自己创建.这样的设计方式更加灵活.在Spring中对象之间的依赖关系也是由IOC容器来维护(类与类之间的依赖关系,使 ...

  8. 树莓派4刷FreeBSD

    树莓派4可以刷FreeBSD了.需要替换boot文件.​加群获得文件QQ交流群817507910.

  9. vue-cli3.0 开发环境构建

    vue-cli3.0官网 1.node版本 node版本要求node>=8.9以上(推荐 8.11.0+)使用以下命令查看node版本 node -v 如果不是最新的请到node下载下载最新版本 ...

  10. HTML5中window.postMessage,在两个页面之间的数据传递

    HTML5中window.postMessage,在两个页面之间的数据传递 2015年11月3日 8536次浏览 关于postMessage window.postMessage虽然说是html5的功 ...