日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数据、事实、实体、值对象、事务、不变性

發(fā)布時(shí)間:2025/7/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据、事实、实体、值对象、事务、不变性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)據(jù)有兩個(gè)重要屬性:首先數(shù)據(jù)是基于時(shí)間的,數(shù)據(jù)是表達(dá)一段時(shí)間內(nèi)一個(gè)邏輯為真的事實(shí)。另外一個(gè)屬性是數(shù)據(jù)本質(zhì)上是不可變的,因?yàn)楹蜁r(shí)間有關(guān),我們是不能回到過去改變數(shù)據(jù)的真實(shí)性。這兩個(gè)屬性就意味著:對(duì)數(shù)據(jù)你其實(shí)只有兩個(gè)主要的操作:讀取現(xiàn)有數(shù)據(jù),并(隨著時(shí)間)添加更多新的數(shù)據(jù),CRUD(增刪改查)稱為CR(增讀)。這樣,CRUD其實(shí)沒有U修改,因?yàn)樾薷膶?duì)不可變數(shù)據(jù)是不其作用的(非常類似DDD中值對(duì)象不可變,不能修改,只能更換)。CRUD中也沒有刪除Delete,其實(shí)大部分刪除其實(shí)是一種創(chuàng)建新數(shù)據(jù),如果Bob停止跟隨Mary,但是他們不能改變他曾經(jīng)跟隨過他的事實(shí),刪除那個(gè)他不跟隨她的數(shù)據(jù),你會(huì)增加一個(gè)數(shù)據(jù)記錄,說他在某個(gè)時(shí)刻不再跟隨她了。
其實(shí)狀態(tài)變化有兩種思維:一種是過程形式,一種是邏輯形式。
過去我們的實(shí)體都是列出對(duì)其認(rèn)識(shí)的內(nèi)在屬性,當(dāng)事件發(fā)生致使實(shí)體發(fā)生變化時(shí),往往就是加鎖后逐一改變,或者事務(wù)方式(類似副本方式)。“逐一改變”就是過程式,具體詳細(xì)地描述變化過程,于是在并行的時(shí)候缺失原子性,為了實(shí)現(xiàn)避免臟讀等問題,加鎖成了一種手段。當(dāng)然,事務(wù)方式也解決了這樣的問題,這與非副本的不變值對(duì)象方式,是達(dá)到同樣目的的不同方式,同時(shí)這兩者都屬于邏輯表達(dá)。以前我作過比較,在領(lǐng)域當(dāng)中談?wù)撨壿嬜兓?#xff0c;我認(rèn)為后者較好。
值對(duì)象是實(shí)體狀態(tài)的一種落實(shí),我過去提出過的觀點(diǎn),這是源自于狀態(tài)變化的邏輯形式思維。談?wù)撨壿嫊r(shí),狀態(tài)遷移必須具有原子性,所以我在某個(gè)帖子說值對(duì)象不變性,可以達(dá)到去鎖的目的。
注意:值對(duì)象不變性源自值,并非因?yàn)閷?shí)體狀態(tài),是因?yàn)橹祵?duì)象具有值的不變性,所以才能成為實(shí)體狀態(tài)的落實(shí)。
一些更深入的認(rèn)識(shí):
存在狀態(tài)變化即存在副作用(side effect),所以實(shí)體是副作用存在的因。很多人認(rèn)為副作用是壞的,應(yīng)該去掉,但這只限于邏輯運(yùn)算時(shí)。只要人們想獲得信息,副作用就根本不能避免,最容易理解就是print。
可變的實(shí)體與不可變的狀態(tài),正好就是副作用存在的分界線。實(shí)體之所以會(huì)存在,其實(shí)是因?yàn)槿藗兿氆@取信息,于是值對(duì)象(值)載體便出現(xiàn)了——引用對(duì)象(即實(shí)體對(duì)象)。
狀態(tài)遷移,就是實(shí)體發(fā)生變化,它說明實(shí)體從一個(gè)狀態(tài)遷移到另一個(gè)狀態(tài)。這里面最小單元是狀態(tài),也就是說我們考慮的不是狀態(tài)的構(gòu)成及其內(nèi)在變化(逐一改變),而是計(jì)算出新狀態(tài),然后以“替換”的手段來(lái)實(shí)現(xiàn)實(shí)體變化。這與我們所說到的值對(duì)象不變性和事實(shí)是最小單元如出一轍。(所以“狀態(tài)遷移”是一種事實(shí)觀)
狀態(tài)是表達(dá)一段時(shí)間內(nèi)一個(gè)邏輯為真的事實(shí),這句話很好說明了事實(shí)觀與實(shí)體觀的聯(lián)系。
過去我思考“什么是實(shí)體”,其實(shí)實(shí)體很簡(jiǎn)單,就是一個(gè)KEY,是為了區(qū)別與其他存在的存在。而我們寫類的時(shí)候,其中的id并非實(shí)體KEY,而“類名+類id”才是實(shí)體KEY。所以關(guān)系數(shù)據(jù)庫(kù)中表方式與類方式類似,并不完全滿足事實(shí)觀,而key-value數(shù)據(jù)庫(kù)能更好展現(xiàn)邏輯。關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)平鋪方式,使得查詢速度極快,同時(shí)實(shí)現(xiàn)了邏輯查詢,但這并非從實(shí)現(xiàn)“產(chǎn)生事實(shí)的邏輯”角度出發(fā)的——事件的角度。
immutable is eveything,不可變是一切。
狀態(tài)變化是由事件引起的,從事件來(lá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.....
一、 其實(shí)這就是一種“連續(xù)”和“離散”思維的區(qū)別,盡管世界在我們感官中是連續(xù)的,但連續(xù)過程和中間的“切面狀態(tài)”不是我們關(guān)注的,業(yè)務(wù)說的是規(guī)則,是邏輯的,正如我們經(jīng)常說的“業(yè)務(wù)邏輯”。在規(guī)則或者邏輯中,不存在所謂的切面狀態(tài)。例如“借書”這一個(gè)原子動(dòng)作,有人會(huì)“借一半”,或者說“借一半”是我們所關(guān)注的狀態(tài)?
二、 若果我們一個(gè)個(gè)地改屬性,當(dāng)改了第一個(gè)屬性值,沒改第二個(gè)屬性值時(shí),這就存在了所謂的切面狀態(tài)。單線程時(shí),因?yàn)轫樞驁?zhí)行,不會(huì)讀出切面狀態(tài),變相成為原子操作,但多線程并發(fā)時(shí),讀出無(wú)效的切面狀態(tài)是可能的。解決的方式: 1)改的時(shí)候不能讀,就是我們以前用得最多的鎖; 2)隨時(shí)可讀,改的時(shí)候必須“同一時(shí)間”完全改完,而這就是不變性的整體替換; 3)當(dāng)然后來(lái)又想到一種,讀與改不會(huì)同時(shí)進(jìn)行,暫時(shí)感覺比較復(fù)雜,沒有深入,淺思考了下,感覺實(shí)時(shí)相對(duì)較弱。
三、 還有一點(diǎn),事務(wù)性和不變性,個(gè)人認(rèn)為兩者很像,但又有點(diǎn)不同:
事務(wù)講究復(fù)制隔離,達(dá)到不相互影響,而且最后也需要替換。
不變性無(wú)需復(fù)制,因?yàn)槠湟婚_始就要求在邏輯運(yùn)算期間是“不能改”。
兩者相似點(diǎn): 1)并行時(shí)都是相互不影響; 2)更新時(shí)都是替換手段。
不同點(diǎn): 1)事務(wù)的參與邏輯是在邏輯執(zhí)行前就復(fù)制好,得到隔離性;事務(wù)包裝整個(gè)過程,實(shí)現(xiàn)原子性。 2)不變性方式的“結(jié)果對(duì)象”是在邏輯執(zhí)行完后,根據(jù)各種條件創(chuàng)建的,其原子性體現(xiàn)在替換,并不是包裝過程。
總的來(lái)說就是一前一后,事務(wù)有點(diǎn)像“平行世界”的概念。還有有趣的一點(diǎn)是,不變性前后兩個(gè)狀態(tài)不要求是同構(gòu)的。不變性還有很多有趣的地方,這里就不一一列舉了。而不變性也有缺點(diǎn)的,如要多對(duì)象同時(shí)改變時(shí),需要機(jī)制來(lái)處理。
為什么有這樣大統(tǒng)一美妙大道至簡(jiǎn)的現(xiàn)象呢?因?yàn)橛?jì)算機(jī)軟件系統(tǒng)是本身是符號(hào)邏輯或者形式邏輯或分析邏輯的一種體現(xiàn),而不變性是邏輯上的一個(gè)基礎(chǔ)概念(蒯因與引用透明),如果你學(xué)習(xí)了分析邏輯的這個(gè)基礎(chǔ),你就找對(duì)了方向,但是如果你學(xué)習(xí)幾十年數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ),你不一定能悟出其背后的邏輯真義。
VO相對(duì)的是RO(ReferenceObject),獨(dú)立于“狀態(tài)、實(shí)體”概念的,或者說是不同層次的。只是VO和RO出現(xiàn)相對(duì)較早,而且比較吻合“狀態(tài)、實(shí)體”概念。所以,值對(duì)象只是狀態(tài)的落實(shí),或者說實(shí)現(xiàn)。
“實(shí)體狀態(tài)在某個(gè)時(shí)間點(diǎn)上狀態(tài)是靜止的”,瞬時(shí)的實(shí)體狀態(tài)映射到計(jì)算機(jī)就是不變的數(shù)據(jù),在對(duì)象思維中就是值對(duì)象。而實(shí)體則是RO,不過注意的是這個(gè)引用概念有點(diǎn)變化,并不是引用地址,而是變成實(shí)體KEY。
值對(duì)象的不變性是源自于值概念的,試想為啥非要叫做“值對(duì)象”,而不叫“不變對(duì)象”。

總結(jié)

以上是生活随笔為你收集整理的数据、事实、实体、值对象、事务、不变性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。