小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

數(shù)據(jù)、事實、實體、值對象、事務、不變性

 金雄偉nubbfybt 2018-01-26
數(shù)據(jù)有兩個重要屬性:首先數(shù)據(jù)是基于時間的,數(shù)據(jù)是表達一段時間內一個邏輯為真的事實。另外一個屬性是數(shù)據(jù)本質上是不可變的,因為和時間有關,我們是不能回到過去改變數(shù)據(jù)的真實性。這兩個屬性就意味著:對數(shù)據(jù)你其實只有兩個主要的操作:讀取現(xiàn)有數(shù)據(jù),并(隨著時間)添加更多新的數(shù)據(jù),CRUD(增刪改查)稱為CR(增讀)。這樣,CRUD其實沒有U修改,因為修改對不可變數(shù)據(jù)是不其作用的(非常類似DDD中值對象不可變,不能修改,只能更換)。CRUD中也沒有刪除Delete,其實大部分刪除其實是一種創(chuàng)建新數(shù)據(jù),如果Bob停止跟隨Mary,但是他們不能改變他曾經(jīng)跟隨過他的事實,刪除那個他不跟隨她的數(shù)據(jù),你會增加一個數(shù)據(jù)記錄,說他在某個時刻不再跟隨她了。

其實狀態(tài)變化有兩種思維:一種是過程形式,一種是邏輯形式。

過去我們的實體都是列出對其認識的內在屬性,當事件發(fā)生致使實體發(fā)生變化時,往往就是加鎖后逐一改變,或者事務方式(類似副本方式)?!爸鹨桓淖儭本褪沁^程式,具體詳細地描述變化過程,于是在并行的時候缺失原子性,為了實現(xiàn)避免臟讀等問題,加鎖成了一種手段。當然,事務方式也解決了這樣的問題,這與非副本的不變值對象方式,是達到同樣目的的不同方式,同時這兩者都屬于邏輯表達。以前我作過比較,在領域當中談論邏輯變化,我認為后者較好。

值對象是實體狀態(tài)的一種落實,我過去提出過的觀點,這是源自于狀態(tài)變化的邏輯形式思維。談論邏輯時,狀態(tài)遷移必須具有原子性,所以我在某個帖子說值對象不變性,可以達到去鎖的目的。

注意:值對象不變性源自值,并非因為實體狀態(tài),是因為值對象具有值的不變性,所以才能成為實體狀態(tài)的落實。

一些更深入的認識:

存在狀態(tài)變化即存在副作用(side effect),所以實體是副作用存在的因。很多人認為副作用是壞的,應該去掉,但這只限于邏輯運算時。只要人們想獲得信息,副作用就根本不能避免,最容易理解就是print。

可變的實體與不可變的狀態(tài),正好就是副作用存在的分界線。實體之所以會存在,其實是因為人們想獲取信息,于是值對象(值)載體便出現(xiàn)了——引用對象(即實體對象)。

狀態(tài)遷移,就是實體發(fā)生變化,它說明實體從一個狀態(tài)遷移到另一個狀態(tài)。這里面最小單元是狀態(tài),也就是說我們考慮的不是狀態(tài)的構成及其內在變化(逐一改變),而是計算出新狀態(tài),然后以“替換”的手段來實現(xiàn)實體變化。這與我們所說到的值對象不變性和事實是最小單元如出一轍。(所以“狀態(tài)遷移”是一種事實觀)

狀態(tài)是表達一段時間內一個邏輯為真的事實,這句話很好說明了事實觀與實體觀的聯(lián)系。

過去我思考“什么是實體”,其實實體很簡單,就是一個KEY,是為了區(qū)別與其他存在的存在。而我們寫類的時候,其中的id并非實體KEY,而“類名+類id”才是實體KEY。所以關系數(shù)據(jù)庫中表方式與類方式類似,并不完全滿足事實觀,而key-value數(shù)據(jù)庫能更好展現(xiàn)邏輯。關系數(shù)據(jù)庫的數(shù)據(jù)平鋪方式,使得查詢速度極快,同時實現(xiàn)了邏輯查詢,但這并非從實現(xiàn)“產(chǎn)生事實的邏輯”角度出發(fā)的——事件的角度。

immutable is eveything,不可變是一切。

狀態(tài)變化是由事件引起的,從事件來劃分。

The immutability exists not for the sake of itself. Immutability is abstraction. It does not 'exist' in nature. World is mutable, world is permanently changing.....

一、
其實這就是一種“連續(xù)”和“離散”思維的區(qū)別,盡管世界在我們感官中是連續(xù)的,但連續(xù)過程和中間的“切面狀態(tài)”不是我們關注的,業(yè)務說的是規(guī)則,是邏輯的,正如我們經(jīng)常說的“業(yè)務邏輯”。在規(guī)則或者邏輯中,不存在所謂的切面狀態(tài)。例如“借書”這一個原子動作,有人會“借一半”,或者說“借一半”是我們所關注的狀態(tài)?

二、
若果我們一個個地改屬性,當改了第一個屬性值,沒改第二個屬性值時,這就存在了所謂的切面狀態(tài)。單線程時,因為順序執(zhí)行,不會讀出切面狀態(tài),變相成為原子操作,但多線程并發(fā)時,讀出無效的切面狀態(tài)是可能的。解決的方式:
1)改的時候不能讀,就是我們以前用得最多的鎖;
2)隨時可讀,改的時候必須“同一時間”完全改完,而這就是不變性的整體替換;
3)當然后來又想到一種,讀與改不會同時進行,暫時感覺比較復雜,沒有深入,淺思考了下,感覺實時相對較弱。

三、
還有一點,事務性和不變性,個人認為兩者很像,但又有點不同:

事務講究復制隔離,達到不相互影響,而且最后也需要替換。

不變性無需復制,因為其一開始就要求在邏輯運算期間是“不能改”。

兩者相似點:
1)并行時都是相互不影響;
2)更新時都是替換手段。

不同點:
1)事務的參與邏輯是在邏輯執(zhí)行前就復制好,得到隔離性;事務包裝整個過程,實現(xiàn)原子性。
2)不變性方式的“結果對象”是在邏輯執(zhí)行完后,根據(jù)各種條件創(chuàng)建的,其原子性體現(xiàn)在替換,并不是包裝過程。

總的來說就是一前一后,事務有點像“平行世界”的概念。還有有趣的一點是,不變性前后兩個狀態(tài)不要求是同構的。不變性還有很多有趣的地方,這里就不一一列舉了。而不變性也有缺點的,如要多對象同時改變時,需要機制來處理。

為什么有這樣大統(tǒng)一美妙大道至簡的現(xiàn)象呢?因為計算機軟件系統(tǒng)是本身是符號邏輯或者形式邏輯或分析邏輯的一種體現(xiàn),而不變性是邏輯上的一個基礎概念(蒯因與引用透明),如果你學習了分析邏輯的這個基礎,你就找對了方向,但是如果你學習幾十年數(shù)據(jù)結構和算法基礎,你不一定能悟出其背后的邏輯真義。

VO相對的是RO(ReferenceObject),獨立于“狀態(tài)、實體”概念的,或者說是不同層次的。只是VO和RO出現(xiàn)相對較早,而且比較吻合“狀態(tài)、實體”概念。所以,值對象只是狀態(tài)的落實,或者說實現(xiàn)。

“實體狀態(tài)在某個時間點上狀態(tài)是靜止的”,瞬時的實體狀態(tài)映射到計算機就是不變的數(shù)據(jù),在對象思維中就是值對象。而實體則是RO,不過注意的是這個引用概念有點變化,并不是引用地址,而是變成實體KEY。

值對象的不變性是源自于值概念的,試想為啥非要叫做“值對象”,而不叫“不變對象”。 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多