使用Begin,End模擬加鎖處理業(yè)務邏輯

需求:

對某一組在持續(xù)變化的數(shù)據(jù)進行一系列的組操作(show,delete,add......)
類似于加鎖機制

問題:

在這一組操作過程中,數(shù)據(jù)本身也是在不停變化的(行車記錄儀的視頻是時時在錄的),那么我們在操作過程中
是否要對這個過程中的數(shù)據(jù)的改變做出反應呢?
    是:
        1.用戶本身可能只是想操作在這一組操作開始時的那些數(shù)據(jù),而不是時時的數(shù)據(jù)集合。
        2.如果每次操作都要更新數(shù)據(jù),對于性能來說是個考驗(參考內(nèi)容觀察者模式對數(shù)據(jù)進行監(jiān)控可以減緩這個問題)。
    否:
        1.數(shù)據(jù)的更新不能時時體現(xiàn)在界面上(可以通過標記的方式對已被修改的數(shù)據(jù)進行標記顯示)
        2.會對用戶操作一定的不一致的感覺(例如刪除的數(shù)據(jù)還能夠看到(同樣可以通過標記的方式解決))

類加鎖機制處理

begin--operation*n--end:
    1.用戶進入某一組操作的入口:
        begin:獲取數(shù)據(jù),并進行數(shù)據(jù)的初始化操作(例如排序等),初始化各種操作標記集合(可以是int型集合,使用位運算來表示每個位置的元素的處理狀態(tài)),同時將標記設置為begin狀態(tài)。
    2.用戶開始進行N次各種操作:
        operation:
            get:從begin中初始化并處理好的數(shù)據(jù)中獲取指定的數(shù)據(jù)。
            delete:檢查是否可被刪除,如果可以將操作標記集合中對應位置的標記的對應刪除的位設置為1。
            lock:檢查是否可被加鎖,如果可以將操作標記集合中對應位置的標記的對應加鎖的位設置為1。
            ......
    3.用戶退出該系列操作:
        end:此時遍歷操作標記集合,將其中為1的位的對應元素進行實際的相應的操作,清空各種集合和狀態(tài),將標記設置為end狀態(tài)。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容