目標:
大家可以設想這樣一個情景,公司已經部署資訊化,且很多辦公流程已經挪到線上正在運營的系統來解決,這帶給企業的員工非常大的便利,節省辦公時間,提高辦公效率,可是我們把所有的流程和資料都放到了公司伺服器,一旦離開了公司,我們就相當於和我們所有的辦公環境脫離了,不再可以查看公司系統上的運營資料,不再可以進行添加刪除等等一系列操作。如果你最近的工作非常的多,你在有限的正常辦公時間內不能完成,那怎麼辦,只有在辦公室奮戰,叫苦不迭的夜晚辦公室生活就開始了.
離線應用生來就是為瞭解決這樣的問題,針對上面所列舉的情況,你不需要在辦公室進行奮戰,你要做的只有
1.將線上系統某個列表(或儲存結構)的資料按需選擇同步到本地
2.回到家,利用閑暇時間,開啟離線應用,對資料進行操作
3.第二天回到公司,同步資料到公司伺服器
說了這麼多,我們的目的只有一個:實現離線辦公
實現方案:
我們將整個離線應用分為兩塊
1.業務資料同步到本地
2.本地提交到業務系統
對於中間支援使用者怎麼去操作資料,不是我們這裡討論的重點,這也是隨商務邏輯而變的,一般都會在功能上做成和線上的系統一樣
1.業務資料同步到本地
將雲上的業務上的資料按需同步到本地並不是什麼難的操作,但是這裡也不容小覷
技術實現要點:
- 能夠按需選擇資料同步到本地,為了讓使用者不用花大量的時間在等待同步資料到本地,我們可以採用由使用者選擇資料的同步 機制,有選擇的將真正對使用者有用的資料同步到本地,當然我們在代碼邏輯中,還需要記住使用者的這些選擇,並持久化,為使用者回到公司進行資料提交提供處理基礎
- 離線用戶端資料暫存器能夠實現資料的持久化
業務資料同步到本地除了上面涉及到的,實際上我們還必須解決差異同步問題
雖然我們在同步業務資料到本地的時候,使用者可以按需進行選擇,但是如果使用者當前選擇的資料,有若干資料已經在本地有副本了,這些應該怎麼處理呢?差異同步的實現不知道大家有沒有比較好的方案,我這裡提供一點拙見
- 最笨的方法就是遍曆然後依次判斷個屬性是否相等,若發現在本地有副本,則跳到下一個業務資料條目,繼續運行,
- 使用version法,給每個業務資料條目都加上一個version,對業務資料條目的任何更改都會引起version++,這樣我們就可以通過判斷version來確定,而且我們可以使用截獲事件的手段來避免version給我們帶來商務邏輯上的任何變化
2.提交資料到業務系統
這裡主要是員工回到公司後,系統對員工已經線上下所作的更改提交到業務系統,產生效果
技術實現要點:
- 找到那些已經被更改的資料,我們這裡擬採用“已更改資料”儲存模組來標識使用者已經做了更改的資料條目,這樣可以獲得更快的速度,我們可以在最短的時間找到哪些資料做了更改
- 提交到伺服器,在伺服器上找到那些已更改的資料條目,應用使用者最新的處理結果,若在使用者離線之後,別的使用者對線上的資料做了一些修改,我們應該怎麼處理呢?我們現在暫訂一個原則就是以使用者最後更改為最新資料,當然,這方面確實會有一點點不妥,不知道大家有沒有什麼比較好的方案。