主頁 > 企業開發 > White Rose設計與架構的想法分享

White Rose設計與架構的想法分享

2022-12-20 07:16:20 企業開發

在七牛云校園黑客馬拉松中,一款設計優秀、邏輯清晰的白板作品脫穎而出,獲得第二名的好成績,這就是來自鄭州大學Since團隊的White Rose白板,以下是他們的設計和架構分享,

一、前言

White Rose是參加七牛云hackathon比賽的作品,賽題的主要內容是開發一個「多人協作白板」,旨在鼓勵在校大學生用編程創造價值,

賽題核心需求包含三個:

  1. 多人可以加入一個房間,同時進行繪畫(盡可能多的形狀隨意繪制)
  2. 所有操作可以撤銷和恢復
  3. 可以創建不同頁面,支持只讀模式(頁面鎖定后,所有人不可編輯)

二、產品設計

(1)愿景

基于hackathon的比賽要求,我調研了一些白板軟體,這些軟體不乏有一些「操作困難」「功能繁雜」等問題,所以,我定下一個產品愿景:「做一款從兩歲到八十歲都能用的白板」

(2)追求

基于以上愿景我也設立了幾條產品追求:「功能一鍵即達」「界面極致簡潔」「內容高度自由」

作為喬布斯的粉絲,印象中喬布斯當年設計iphone時,要求工程師所有的功能操作不能超過3步,而對于白板一個單獨的軟體來說「進入」一步,「功能選擇」一步,所以留給我的只有一步了,

(3)界面

為了讓界面足夠簡潔,我將所有「擴展」功能全部放到了「上下左右」四個隱藏選單里,從而讓整個頁面除了四個「必要資料」外,就只有一塊“純粹的白板”,

  • 對于兩歲的小朋友來說進入就可以直接隨意的涂鴉,
  • 對于八十歲老教授來說,這用起來跟教室的黑板一樣,

下面分別是整體的界面效果,

無論多大的螢屏,什么形狀的螢屏,都會無失真的自動擴張,因為它本質是一個高寬100%的矢量圖,

因為不同螢屏的大小限制,這樣的設計可能回導致小螢屏的人看到的內容沒有大螢屏的「完整」,

對于有些軟體的處理可能會有利用「拖拽頁面」功能來確保每個人所能接收到的資料一致,這將意味著,用戶的每次觸屏操作,軟體都要區分用戶是想「拖拽頁面」還是想「繪畫」,而用戶也需要在兩個功能間頻繁切換,

而我的理解:“白板”本質是一個大號的草稿紙,當我們給一群人講一些內容的時候,「演講者」可能隨手會在白板上寫下他講的關鍵詞「power point」,一般作為「演講者」會寫在一個大家都能看到的地方,這對「演講者」不會增加太大負擔,而對于「聽眾」一邊聽內容,還要一邊還要拖拽頁面去確認演講者寫在那里,這個負擔更大,

回想一下我們在教室上課的時候,老師會盡量把內容寫在中間靠上的位置,而不是底部,因為前排同學會擋到內容,

所以我摒棄了「拖拽頁面」的功能,

當然「縮放」也不乏是另外一種解決方案,但是也會徒增操作者(縮放)的使用負擔,并且還會引入另外一個問題就是「失真」,

關于顏色:

其實在選擇白板的底色的時候,可能就是一個白色,但是其實白色也是五彩斑斕的,該用什么呢?

我想到一個詞「青紅皂白」,索性我就用「青紅」和「皂白」調制了一個對眼睛更加柔和的 「青紅皂白色」作為白板的底色,

(4)拓展功能

設計好了整個頁面,接下來就是功能設計,我在設計界面的時候,預留了4個隱藏選單欄來放拓展白板功能,為了讓所有功能「一鍵即達」,并且更簡單的使用,我采用了icon + 文字描述的方式,讓用戶更易理解,

整體展開如下圖所示:

為什么是這樣的擺放呢?

1、功能分類

根據賽題要求的功能,我將所有功能分為了四類,

  1. 形狀拓展:用戶可以選擇圓、長方形、菱形、三角形、直線等形狀,
  2. 顏色拓展:用戶可以修改所有形狀軌跡的顏色,
  3. 大小拓展:圖形的大小和線條的粗細可以切換,
  4. 頁面拓展:頁面可以添加洗掉和切換,另外頁面的內容支持撤銷和恢復,

2、何處安放

我在想這個問題的時候,想象了在一張紙上作畫的場景,

  • 一般我們習慣在桌子右側放上各式各樣的水彩筆,方便我們切換顏色,所以我將「顏色拓展」放在了右側,
  • 我們習慣在桌子的上方和左側放尺子、圓規之類的用來拓展圖形和豐富繪畫形狀的工具,所以我將「形狀拓展」「大小拓展」放在了左側和上側,
  • 當我們要做翻書、撕頁等頁面操作時,一般會從右下角開始,所以我將所有的「頁面拓展」放置到了下側,同時右下角有一個對應頁面的頁碼,也因為大多數書的頁碼在這個位置,

(5)自由布局

上面講到,我根據我個人的想法將各個功能進行了分類,并且按照我所理解的「更方便的布局」進行了排放,但在實際操作程序可能并不符合一些其他用戶的操作習慣,比如:左撇子,

因此我將每個功能做了集成,并且可以隨意的改變不同功能所在的位置,也就是所有的功能布局,用戶可以根據自己的想法進行布局上的DIY,

三、架構設計

因為本次開發的周期只有21天,另外作業日的白天還需要上班,非常緊迫,所以需要采用非常簡單且高效的架構設計,當然也需要考慮一些后續擴展的可能,

(1)整體架構

為了更好的「持續集成」我們采用自建的gitlab管理代理,并使用gitlab-runner完成自動化部署,

整體架構圖如下圖所示:

(2)互動模型

對于后端來說,為了更加高效的溝通,我將整個互動模型,定義為一個群聊,群內所有人的訊息統一發給服務端,然后服務端再統一轉發給其他人,

后端只需要確認三點:1.誰發的訊息,2.發到那個群里的,3.訊息型別,

整體互動結構如下:

{
"type": 1234,  // 操作型別
"fromId": 123, // 發送人id
"roomId": 1234,// 所在房間
"time": 152150025421564 //時間戳,前端不需要發送
"data": {} // 操作內容
} 

這樣做的兩個好處:

  1. 所有訊息有一個統一的時序(即服務端時間)
  2. 后端完全無需關注「data」的具體內容,只根據type區分「接收」「分發」「存盤」操作,

(3)data模型

data模型主要是前端所發送的和接收到的message里的data結構,

data里面該放什么?我將用戶的所有操作定義為option,將用戶的所有option放到data里面完成用戶操作的轉發,option的結構如下:

interface Op {
type: number // 頁面操作or圖形操作
graph?: {
op: number // 添加、旋轉、縮放、平移
type?: string // 圖形類別
key?: string // 圖形所對應的key
page?: number // 圖形所對應的頁面
content?: any // 圖形內容
}
page?: {
op: number //添加、洗掉、切換頁面
key?: number // 頁面對應的key
content?: any // 頁面對應的內容
}
} 

這樣的每個option,我們都會存放到操作堆疊里面,結合另外一個快取堆疊,即可實作撤銷和恢復,

(4)多人協同

對于多人的操作,其實是多個人對多個圖形的操作,人與當前所操作的圖形是一一對應的,

所以我通過一個令牌集的概念,來存放「所有的用戶id」,以及每個用戶當前「所操作的圖形id」,這樣就確定下來個每個用戶正在操作什么,

不同用戶的操作通過以下流程完成:

  1. 操作者設定當前所操作圖形的id,并更新令牌集,
  2. 接收者同步更新令牌集,
  3. 操作者發送操作資料(option),
  4. 接收者根據用戶資訊從令牌集中確定所操作的圖形,再根據option修改具體的svg資料,

整體白板從產品的設計到架構的設計就結束了,

歡迎體驗:http://whiterose.cf.since88.cn

前端代碼:https://lab.since88.cn/whiterose/frontend

后端代碼:https://lab.since88.cn/whiteros

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/540317.html

標籤:其他

上一篇:JS中的相等性判斷

下一篇:記錄--教你用three.js寫一個炫酷的3D登陸頁面

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more