做個開源博客學習Vite2 + Vue3 (三)博客設計和代碼設計

項目搭建好了之后是不是可以編碼了呢?
等等不要著急,我們是不是應該先設計一下?比如博客的功能等?

博客設計

先做個簡單的個人博客,因為是個人版,所以可以省略注冊、登錄這些功能,表結構也可以簡單一點。
基礎功能:添加博文、顯示博文、博文列表+查詢+分頁、討論列表和添加討論。
雖然功能弱了一點,但是麻雀雖小五臟俱全,vite2 和 vue3 的基礎用法也可以體現(xiàn)一些。

功能設計

001博客功能

是不是做成圖更明顯一些?

代碼設計

002代碼結構.png

model設計

003model設計.png

model代碼

先來看看 model 的代碼。
/src/model/blogModel.js

/**
 * 顯示博文用,建表用
 * @returns 博文的全部的屬性
 */
export const blog = () => {
  return {
    // id: 0,
    title: '', // 這是一個博客標題
    groupId: 0, // 分組ID
    addTime: new Date(), // 添加時間
    introduction: '', // 這是博客的簡介
    concent: '', // 這是博客的詳細內(nèi)容
    state: 1, // 1:草稿;2:發(fā)布;3:刪除
    viewCount: 0, // 瀏覽量
    agreeCount: 0, // 點贊數(shù)量
    discussCount: 0 // 討論數(shù)量
  }
}

/**
 * 表單用的博文,綁定表單用。
 * * title:文章標題
 * @returns 添加博文需要的屬性
 */
 export const blogForm = () => {
  return {
    // id: new Date().valueOf(),
    title: '', // 這是一個博客標題
    addTime: new Date(), // 添加時間
    introduction: '', // 這是博客的簡介
    concent: '', // 這是博客的詳細內(nèi)容
    state: 1 // 1:草稿;2:發(fā)布;3:刪除
  }
}

/**
 * 首頁用的博文列表,按需設置字段
 * @returns 博文列表
 */
 export const blogList = () => {
  return {
    id: 0,
    title: '', // 這是一個博客標題
    addTime: '', // 添加時間
    introduction: '', // 這是博客的簡介
    viewCount: 0, // 瀏覽量
    agreeCount: 0, // 點贊數(shù)量
    discussCount: 0 // 討論數(shù)量
  }
}

/**
 * 編輯博文用的列表
 * @returns 文章標題列表
 */
 export const articleList = () => {
  return {
    id: 0,
    title: '', // 這是一個博客標題
    addTime: '', // 添加時間
    viewCount: 0, // 瀏覽量
    agreeCount: 0, // 點贊數(shù)量
    discussCount: 0 // 討論數(shù)量
  }
}

/**
 * 建表用的討論
 * @returns 討論表
 */
 export const discuss = () => { 
  return {
    // id: 0,
    blogId: 0,
    discusser: '' , // 昵稱
    addTime: new Date(), // 時間
    concent: '', // 內(nèi)容
    agreeCount: 0
  }
}

/**
 * @returns 討論的model
 */
export const discussList = () => { 
  return {
    id: 0,
    discusser: '' , // 昵稱
    addTime: '', // 時間
    concent: '', // 內(nèi)容
    agreeCount: 0
  }
}

原生js是不需要先定義對象的,只是我感覺把需要的對象放在一起集中管理一下,還是比較方便的,雖然這么做用處不大,因為不是ts,沒有任何強制性也沒有檢查機制,但是還是想集中管理一下。

狀態(tài)設計

004狀態(tài)設計.png

狀態(tài)嘛,簡單地說就是多個組件共享的數(shù)據(jù),當然這么說不夠嚴謹。

/src/model/blogState.js

import { inject } from "vue"

export const blogState = {
  currentGroupId: 0, // 選擇的分組ID。0:沒選擇
  currentArticleId: 0, // 選擇的文章ID。
  editArticleId: 0, // 當前修改的文章ID
  findQuery: { }, // 查詢條件
  page: { // 分頁參數(shù)
    pageTotal: 100,
    pageSize: 2,
    pageIndex: 1,
    orderBy: { id: false }
  }, 
  isReloadDiussList: false
}

/**
* 狀態(tài)的管理
* * 獲取狀態(tài)
* * 設置當前選擇的分組
* * 設置當前選擇的文章
* * 設置當前編輯的文章
*/
export default function blogStateManage() {
  // 先把狀態(tài)取出來,否則在 function 里面無法讀取。
  const state = inject('blogState')

  // 子組件里面獲取狀態(tài)
  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, // 獲取狀態(tài)
    setEditArticleId, // 設置當前編輯的文章
    setCurrentGroupId // 設置當前選擇的分組
  }
}

算是一個簡易的狀態(tài)管理吧,先定義一下需要的狀態(tài),在main里面注入狀態(tài),然后用 inject 提取狀態(tài),再寫幾個設置狀態(tài)的函數(shù),基本就可以搞定了。

后續(xù)想寫成插件的形式,當然會完善一些功能,不會這么單薄。

感覺 Vuex 有點太厚重了,這里也不需要那么強大的功能,所以就自己實現(xiàn)了一個簡單的。

未完待續(xù),后面更精彩。

源碼

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

在線演示

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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容