邊界接口設計

用戶交互設計原則、模板

分離具體業務,基於認知規律,抽象出通用指導原則。 服務器

 

整體原則 網絡

l  心智模型:感知;理解;目標、計劃、執行、解惑、總結; 異步

l  一致性:習慣、操做系統、品牌識別、關聯軟件、軟件內部 async

 

感知體驗

原則:簡潔、對比、流暢 函數

視覺:配色、佈局、排版、動畫 工具

媒體:文字、圖像、音視頻 佈局

交互:鍵鼠、觸摸、手勢 動畫

 

理解內容

原則:下降複雜度 ui

主次:重要(基本)、次要(詳細) 編碼

分組:同類信息

分層:面向用戶、面向設備

聯想:運用比喻、類比輔助理解

 

任務處理

原則:站在用戶角度(使用用戶語言、工做流、交互流),簡單(步驟少、有嚮導),智能

 

目標(作什麼)

被動任務通知:緊急信息、重要信息、普通訊息

主動任務導航:經常使用功能、全部功能(功能分組、子功能)

 

計劃(怎麼作)

分解流程,預計花費時間,分析使用者情緒

 

執行(作得好)

輸入:模板、嚮導、默認值

提交:動做、響應、歷史

處理故障:預防避免、提示改正、恢復、提交故障反饋

尋求幫助:提示、幫助文檔、諮詢反饋、遠程協助

 

典型場景

安裝:硬件鏈接嚮導、一鍵安裝環境,程序安裝嚮導

 

調試:部署人員工具箱

 

培訓:演示、試用、多媒體幫助文檔、宣傳材料

 

平常使用-主界面

l  待處理任務:區別重要性、複雜任務嚮導

l  經常使用任務:快捷訪問,複雜任務嚮導

l  功能導航:提供全部功能的入口

 

平常使用-功能界面

l  多模塊:劃分子功能、劃分功能步驟(嚮導)

l  數據顯示:基本信息(列表)、詳細信息;信息分組

l  表單提交:提供模板、提供默認值、隱藏高級參數;模糊查詢、高級查詢;

l  提交響應:主動(即時、長時)、被動(系統通知)、及時緊急通知

 

平常使用-處理故障

l  提示:輸入錯誤實時提示、業務邏輯提示、提交後提示

l  恢復:嚮導

l  反饋:環境與日誌輸出嚮導

 

軟件升級:自動升級、新功能使用嚮導

 

風格指南

LOG、配色、功能模板、語言詞典

 

 

跨平臺接口設計原則、模板

設計原則

職責獨立:上層決定下層,下層提供可行性驗證,上下層依賴抽象

通訊類型:請求響應(即時、長時)、通知

 

模板-PINVOKE

會話類型

同步請求DLL

相似於System.IO. Stream類的方法

int Read(byte[] buffer, int offset, int count)

 

異步請求DLL

相似於System.IO. Stream類的方法

IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)

int EndRead(IAsyncResult asyncResult)

 

DLL主動通知

例如告警信息上報

 

基本概念

參數尋址方式

DoWork(MyStruct x);          要求零級間接尋址。     容許

DoWork(MyStruct* x);         要求一級間接尋址。     容許

DoWork(MyStruct** x);       要求二級間接尋址。     禁止

 

結構類型字節對齊

單字節

 

狀態模板

啓動

初始化開始-》各項設置-》初始化結束

 

正常運行

基本狀態:鏈接、斷開;接口:註冊,註銷,鏈接、斷開事件通知

 

關閉

釋放

 

 

函數模板

請求

Int  模塊名方法名( [const] 類型1  _參數1 [const] 類型n  _參數n)

 

類型分類

簡單類型:charchar*

結構體:Json

 

輸入輸出

參數能夠做爲輸入或輸出使用,默認爲輸入,若是是用於輸出須要註明

 

回調

XXXCallback(int業務標識, 枚舉類型  事件類型,  object 事件參數)

XXXCallback(int業務標識, object 參數)

 

同步請求DLL

重構:去除超時參數(由實現方決定是否超時,而後經過返回值體現)、不加Sync

 

異步請求DLL

 

DLL主動通知

代碼模板


 

模板-SOCKET私有協議

會話類型

請求:例如鏈路創建與鏈路響應,支持一次請求中包含多條關聯報文

通知:例如心跳報文、GPS信息上報

 

基本概念

報文格式

報文 = 報文頭 + 報文內容

報文頭格式以下

字段

類型

長度(字節)

說明

起始標識

Int16

2

固定爲0xAAAA,用於識別報文開始

報文內容長度

Int32

4

後面全部字段總長度

功能標識

Int16

2

用於識別報文類型

註冊標識

Int32

4

相似於動態密碼,客戶端註冊成功後得到

發送方事務標識

Int32

4

由發送方指定。當會話類型爲請求型時,用於區別發送方的不一樣請求;當會話類型爲通知型時,固定爲0

接收方事務標識

Int32

4

由接收方指定。當會話類型爲請求型時,用於區別接收方的不一樣請求,特別的,會話開始的第一條報文,發送方的該字段填0;當會話類型爲通知型時,固定爲0

 

事務標識

以鏈路創建爲例,正常流程是客戶端發送「鏈路創建」,服務器端發送「鏈路創建回覆」。客戶端發送時,在報文頭填寫「發送方事務標識」爲XX不爲0,能夠用遞增的方式區別不一樣請求過程),「接收方事務標識」爲0;服務器發送時,在報文頭填寫「發送事務標識」爲YY不爲0),「接收方事務標識」爲X

若是客戶端發起對同一號碼的兩次跟蹤,那麼兩次跟蹤的「發方事務標識」應該是不一樣的。

一個報文若是發方事務標識和收方事務標識都爲0,表示是通知型會話;若是發方事務標識不爲0,收方事務標識爲0,表示請求型會話的第一條報文;若是發方事務標識和收方事務標識都不爲0,表示請求型會話,但不是請求過程當中的第一條報文。

 

註冊標識

邏輯上用於鑑權,相似於動態密碼。服務器端和客戶端通訊的第一組報文就是註冊與註冊響應(鏈路創建與鏈路創建響應),註冊成功後,客戶端得到註冊標識,以後服務器和客戶端通訊的全部報文的報文頭中,都包含該註冊標識。客戶端從新註冊後會得到新的註冊標識。

 

變長報文

有些報文中的部分字段是可選的或者是變長的,均可能致使報文的長度是可變的。這就要求,解碼報文時須要逐字段解碼。定義報文的字段時,用(*)表示該字段是可選的或是變長的。

 

解碼規則

接收到的全部字節存放在接收字節隊列中,先依據起始標識(0x55AA)尋找到可能的報文頭,解碼報文頭,得到功能標識、報文內容長度、註冊標識,驗證功能標識合法性、驗證報文內容長度小於等於1000、驗證註冊標識的合法性,若是驗證不成功,繼續尋找可能的報文頭,若是驗證成功後,讀取報文內容字節,依據具體功能的報文結構逐字段解碼報文內容,若是解碼成功,則在隊列中截掉該報文對應的字節(若是報文頭以前還有字節,也截掉),若是解碼不成功,繼續尋找可能的報文頭。

 

字節序

short(int16)int(int32)、long(int64)ushort(uint16)uint(uint32)、ulong(uint64)採用網絡字節序編碼,關於網絡字節序的具體概念,請參見MSDN或是百度。

 

單字節對齊

由於服務器與客戶端都是X86/X64平臺,對字節對齊沒有特殊要求,因此採用最簡單的單字節對齊。

 

代碼模板

 

模板-桌面應用程序與網頁

會話類型

桌面應用程序發起請求

例如:桌面應用程序使用定位功能,發起在網頁中顯示地圖位置的請求

 

網頁發起請求

例如:在地圖中已定位的圖標(對應一我的)上,發起在桌面程序中對該用戶的呼叫

 

基本概念

桌面應用程序

對象: System.Windows.Forms.WebBrowserHtmlDocument

成員:GetElementByIdInvokeScriptAttachEventHandler

 

複雜參數傳遞:JSON方式

對象:JavaScriptSerializer

 

狀態模板

桌面應用程序和WEB客戶端的狀態同步

桌面應用程序:屬性(簡單類型、各類集合類)

WEB客戶端:JS全局變量(簡單類型、Array對象)

 

代碼模板

 

 



相關文章
相關標籤/搜索