色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

ORM With Versioning Control

  在一些場(chǎng)合,我們可能需要對(duì)業(yè)務(wù)實(shí)體進(jìn)行版本控制。類似于源碼管理工具一樣,可以查看歷史版本,可以回滾,可以Lock,一個(gè)業(yè)務(wù)實(shí)體對(duì)象,同一時(shí)刻只允許一個(gè)人進(jìn)行更新操作。為了實(shí)現(xiàn)信息的可追溯性,這些功能應(yīng)該是必不可少的。只是我們?cè)撛谀睦锶タ刂茖?shí)體對(duì)象的版本呢?

  我們希望將版本控制的功能,獨(dú)立于某一個(gè)具體的業(yè)務(wù)實(shí)體,這樣才可以實(shí)現(xiàn)最大共用和擴(kuò)展性。顯然,要實(shí)現(xiàn)這一功能最好的切入點(diǎn)應(yīng)該是在數(shù)據(jù)持久層,也就是在實(shí)體持久化時(shí),我們需要有一個(gè)統(tǒng)一的,通用化的接口來完成,同時(shí)在這里插入版本控制的功能。無疑,這里的最合適的持久化接口應(yīng)該是ORM,那就相當(dāng)于我們要實(shí)現(xiàn)一個(gè)帶實(shí)現(xiàn)版本控制的ORM接口。

  版本控制功能,我們不僅要求與數(shù)據(jù)庫無關(guān),還要求與具體的某一種ORM框架無關(guān)。與數(shù)據(jù)庫無關(guān),我們可以很容易通過ORM來隔立,但是與ORM框架無關(guān),我們就需要將版本控制的功能從與某一種ORM框架隔離開來。

  版本控制功能,是插入到ORM接口中去的,那在哪里去檢測(cè)實(shí)體的修改情況呢?一種方案是將原始數(shù)據(jù)和修改后的數(shù)據(jù),傳入版本控制接口,由版本控制模塊進(jìn)行比較,從而得出實(shí)體的變化情況。

  另一種方案,就是在實(shí)體中插入一定的屬性變化跟蹤機(jī)制,這也是現(xiàn)有的ORM實(shí)體中已經(jīng)有實(shí)現(xiàn)的一部分,不同的ORM框架在監(jiān)控實(shí)體更新變化方面都有不同的機(jī)制,在NBear,LINQ To SQL,Entity Framework都有一套自己的實(shí)體屬性變化跟蹤機(jī)制。我們可以將這些不同的跟蹤機(jī)制統(tǒng)一起來,形成一套標(biāo)準(zhǔn)的ORM版本控制模塊的接口實(shí)現(xiàn)。

  還有一些需要考慮的:

  存儲(chǔ)歷史版本時(shí),是使用增量存儲(chǔ)還是使用完全存儲(chǔ)。增量存儲(chǔ),在回滾歷史版本時(shí),就需要從當(dāng)前版本起,做很多的回溯的工作,而完全存儲(chǔ)就可能會(huì)耗很多存儲(chǔ)空間。

  在存儲(chǔ)方式上,我們是將它們存儲(chǔ)到數(shù)據(jù)庫,還是以XML文件的格式單獨(dú)存放每一個(gè)版本的記錄。

  目前的一個(gè)存儲(chǔ)想法是:使用增量存儲(chǔ)與完全存儲(chǔ)共存,將每次改變的字段,以及它的原始值和新值保存到數(shù)據(jù)庫中,方便在查看歷史版本修改記錄時(shí)用。而將每個(gè)版本完整值,以一定的目錄格式,XML文件的格式保存在磁盤中,可以考慮壓縮等因素。這樣做的原因是,回滾歷史版本的操作一般是相對(duì)比較少的,但是存儲(chǔ)完整的歷史版本值,卻可能需要很多的數(shù)據(jù)庫空間和考慮備份的問題。假設(shè)我們以操作日期的目錄格式來保存文件,我們就可以方便的進(jìn)行備份和轉(zhuǎn)移。

  遺留問題,在ORM中,對(duì)象的關(guān)聯(lián)是必不可少的內(nèi)容。對(duì)于對(duì)象之間的關(guān)聯(lián)關(guān)系發(fā)生變化是否也需進(jìn)行版本控制,這樣一來,版本控制的內(nèi)容就會(huì)變得更復(fù)雜和難以實(shí)現(xiàn)。所以暫且限定,版本控制只針對(duì)于單對(duì)象的屬性值變化。

  以上就是ORM With versioning control的一些想法,這些想法是從Content Repository API For Java (JCR)衍生而來的。在JCR中是實(shí)現(xiàn)了一個(gè)自有格式(XML)的數(shù)據(jù)庫,用在CMS中存儲(chǔ)一些結(jié)構(gòu)可變(非結(jié)構(gòu)化)的內(nèi)容。同時(shí)在它的功能定義中,還包括了一些傳統(tǒng)數(shù)據(jù)庫(或數(shù)據(jù)庫使用接口)所不具有的功能,包括:版本控制,數(shù)據(jù)變化檢測(cè)等功能。我想法,在結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)中,要實(shí)現(xiàn)這些功能,應(yīng)該是在ORM上來實(shí)現(xiàn),歡迎大家來討論。

NET技術(shù)ORM With Versioning Control,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 榕江县| 大田县| 阿坝县| 长武县| 资阳市| 云南省| 神池县| 嘉义市| 叙永县| 南郑县| 平罗县| 白玉县| 吉林市| 江陵县| 平原县| 崇文区| 铜鼓县| 察隅县| 肥西县| 康保县| 沈阳市| 北流市| 伽师县| 望都县| 莲花县| 溧阳市| 台湾省| 柳河县| 精河县| 江安县| 定陶县| 晋中市| 新泰市| 婺源县| 永德县| 迁安市| 唐山市| 郎溪县| 西充县| 柯坪县| 梁平县|