分離具體業務,基於認知規律,抽象出通用指導原則。
整體原則
l 心智模型:感知;理解;目標、計劃、執行、解惑、總結;
l 一致性:習慣、操做系統、品牌識別、關聯軟件、軟件內部
原則:簡潔、對比、流暢
視覺:配色、佈局、排版、動畫
媒體:文字、圖像、音視頻
交互:鍵鼠、觸摸、手勢
原則:下降複雜度
主次:重要(基本)、次要(詳細)
分組:同類信息
分層:面向用戶、面向設備
聯想:運用比喻、類比輔助理解
原則:站在用戶角度(使用用戶語言、工做流、交互流),簡單(步驟少、有嚮導),智能
目標(作什麼)
被動任務通知:緊急信息、重要信息、普通訊息
主動任務導航:經常使用功能、全部功能(功能分組、子功能)
計劃(怎麼作)
分解流程,預計花費時間,分析使用者情緒
執行(作得好)
輸入:模板、嚮導、默認值
提交:動做、響應、歷史
處理故障:預防避免、提示改正、恢復、提交故障反饋
尋求幫助:提示、幫助文檔、諮詢反饋、遠程協助
安裝:硬件鏈接嚮導、一鍵安裝環境,程序安裝嚮導
調試:部署人員工具箱
培訓:演示、試用、多媒體幫助文檔、宣傳材料
平常使用-主界面
l 待處理任務:區別重要性、複雜任務嚮導
l 經常使用任務:快捷訪問,複雜任務嚮導
l 功能導航:提供全部功能的入口
平常使用-功能界面
l 多模塊:劃分子功能、劃分功能步驟(嚮導)
l 數據顯示:基本信息(列表)、詳細信息;信息分組
l 表單提交:提供模板、提供默認值、隱藏高級參數;模糊查詢、高級查詢;
l 提交響應:主動(即時、長時)、被動(系統通知)、及時緊急通知
平常使用-處理故障
l 提示:輸入錯誤實時提示、業務邏輯提示、提交後提示
l 恢復:嚮導
l 反饋:環境與日誌輸出嚮導
軟件升級:自動升級、新功能使用嚮導
LOG、配色、功能模板、語言詞典
職責獨立:上層決定下層,下層提供可行性驗證,上下層依賴抽象
通訊類型:請求響應(即時、長時)、通知
同步請求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)
類型分類
簡單類型:char、char*等
結構體:Json
輸入輸出
參數能夠做爲輸入或輸出使用,默認爲輸入,若是是用於輸出須要註明
回調
XXXCallback(int業務標識, 枚舉類型 事件類型, object 事件參數)
XXXCallback(int業務標識, object 參數)
重構:去除超時參數(由實現方決定是否超時,而後經過返回值體現)、不加Sync
DLL主動通知
請求:例如鏈路創建與鏈路響應,支持一次請求中包含多條關聯報文
通知:例如心跳報文、GPS信息上報
報文格式
報文 = 報文頭 + 報文內容
報文頭格式以下
字段
|
類型
|
長度(字節)
|
說明
|
起始標識
|
Int16
|
2
|
固定爲0xAAAA,用於識別報文開始
|
報文內容長度
|
Int32
|
4
|
後面全部字段總長度
|
功能標識
|
Int16
|
2
|
用於識別報文類型
|
註冊標識
|
Int32
|
4
|
相似於動態密碼,客戶端註冊成功後得到
|
發送方事務標識
|
Int32
|
4
|
由發送方指定。當會話類型爲請求型時,用於區別發送方的不一樣請求;當會話類型爲通知型時,固定爲0。
|
接收方事務標識
|
Int32
|
4
|
由接收方指定。當會話類型爲請求型時,用於區別接收方的不一樣請求,特別的,會話開始的第一條報文,發送方的該字段填0;當會話類型爲通知型時,固定爲0。
|
事務標識
以鏈路創建爲例,正常流程是客戶端發送「鏈路創建」,服務器端發送「鏈路創建回覆」。客戶端發送時,在報文頭填寫「發送方事務標識」爲X(X不爲0,能夠用遞增的方式區別不一樣請求過程),「接收方事務標識」爲0;服務器發送時,在報文頭填寫「發送事務標識」爲Y(Y不爲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.WebBrowser、HtmlDocument
成員:GetElementById、InvokeScript、AttachEventHandler
複雜參數傳遞:JSON方式
對象:JavaScriptSerializer
桌面應用程序和WEB客戶端的狀態同步
桌面應用程序:屬性(簡單類型、各類集合類)
WEB客戶端:JS全局變量(簡單類型、Array對象)