討論:動(dòng)態(tài)產(chǎn)生的持久模型和數(shù)據(jù)存儲(chǔ)的設(shè)計(jì)模式

          動(dòng)態(tài)產(chǎn)生的持久模型和數(shù)據(jù)存儲(chǔ),這個(gè)詞語感覺挺晦澀的,不過估計(jì)在實(shí)際的項(xiàng)目中或者研發(fā)的產(chǎn)品中大家都碰到過這樣的場(chǎng)景:
          例如在一個(gè)簡(jiǎn)單的考試系統(tǒng)中,出題人在系統(tǒng)中出題,答題人進(jìn)行相應(yīng)的答題。
          問題:
          這一個(gè)簡(jiǎn)單的場(chǎng)景映射到系統(tǒng)中通常會(huì)形成這樣的問題,出題人所出的題目其實(shí)就映射到了一個(gè)題目的持久模型,而答題人進(jìn)行答題時(shí)則是基于這個(gè)動(dòng)態(tài)產(chǎn)生的持久模型進(jìn)行的數(shù)據(jù)存儲(chǔ),這里的問題就是怎么去產(chǎn)生這個(gè)動(dòng)態(tài)的持久模型,怎么去將數(shù)據(jù)存儲(chǔ)到這個(gè)持久模型里去。
          問題分析:
          來看正常的情況下關(guān)于持久數(shù)據(jù)的做法,正常情況下,首先我們?cè)O(shè)計(jì)了一個(gè)表或PO,在保存數(shù)據(jù)時(shí)則可直接將相應(yīng)的數(shù)據(jù)保存至表中。
          但在現(xiàn)在的場(chǎng)景下,這個(gè)表或PO需要在系統(tǒng)運(yùn)行時(shí)產(chǎn)生,之后數(shù)據(jù)才能象正常的情況那樣去保存。
          解決方案:
          根據(jù)上面的問題分析,一種解決方案顯而易見,就是動(dòng)態(tài)的產(chǎn)生表或PO,這種方案應(yīng)該是說難不難,說簡(jiǎn)單也不簡(jiǎn)單,這里最需要注意的是產(chǎn)生的表的字段的屬性的設(shè)置,以及在修改時(shí)表的字段的同步維護(hù),如果是動(dòng)態(tài)產(chǎn)生PO的話就比較麻煩,因?yàn)榘凑説ibernate的話,還需要生成hbm、修改hibernate.cfg.xml,并且還需要重載SessionFactory才能生效,這種解決方案在修改持久模型時(shí)要特別注意,就是數(shù)據(jù)的保持,很多時(shí)候采用版本策略也許更為適合。
          另外一種解決方案也是經(jīng)常采用的,就是不去動(dòng)態(tài)的產(chǎn)生表或PO,而是提供一種通用的數(shù)據(jù)持久策略,一個(gè)簡(jiǎn)單的實(shí)現(xiàn)就是設(shè)計(jì)一張存儲(chǔ)數(shù)據(jù)的表,這張表的字段由字段名外鍵、字段值共同構(gòu)成,字段名外鍵關(guān)聯(lián)到動(dòng)態(tài)產(chǎn)生的持久模型的字段,字段值則為實(shí)際進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí)的值,這種方案很明顯的一個(gè)問題就是,會(huì)造成這張表的增長速度非常的塊,特別是在動(dòng)態(tài)產(chǎn)生的持久模型中有超多字段的時(shí)候,另外一個(gè)不是很方便的地方就是在查詢的時(shí)候很麻煩。
          在實(shí)際項(xiàng)目中更傾向于第一種解決方案,不過在采用Hibernate之類ORM的時(shí)候第一種解決方案就比較麻煩了,第二種解決方案感覺更適用于動(dòng)態(tài)產(chǎn)生的持久模型字段比較少,實(shí)際產(chǎn)生的數(shù)據(jù)也比較少、查詢要求比較低的情況下。
          ?
          不知道大家對(duì)于這種場(chǎng)景通常都會(huì)采用什么樣的解決方案呢?

          ps:還有一個(gè)場(chǎng)景感覺也是常見的,就是需要?jiǎng)討B(tài)的擴(kuò)展目前已有的PO或表,不知道在這個(gè)場(chǎng)景中大家會(huì)采用什么樣的解決方案,預(yù)留字段?動(dòng)態(tài)修改表?關(guān)聯(lián)屬性擴(kuò)展表?抑或別的..........

          posted on 2006-04-26 11:19 BlueDavy 閱讀(2680) 評(píng)論(4)  編輯  收藏 所屬分類: 系統(tǒng)設(shè)計(jì)

          評(píng)論

          # re: 討論:動(dòng)態(tài)產(chǎn)生的持久模型和數(shù)據(jù)存儲(chǔ)的設(shè)計(jì)模式 2006-04-26 12:15 寒晴天

          Excel 是怎么處理的?
            回復(fù)  更多評(píng)論   

          # re: 討論:動(dòng)態(tài)產(chǎn)生的持久模型和數(shù)據(jù)存儲(chǔ)的設(shè)計(jì)模式 2006-04-27 18:04 么么茶(qq20142874)

          著名的開源工作流引擎shark采用后一種解決方案,可以參考。  回復(fù)  更多評(píng)論   

          # re: 討論:動(dòng)態(tài)產(chǎn)生的持久模型和數(shù)據(jù)存儲(chǔ)的設(shè)計(jì)模式 2006-05-08 17:59 myy

          這種情況確實(shí)令人頭痛,我傾向于后一種解決方案,查詢的問題,用db的存貯過程行列轉(zhuǎn)置到臨時(shí)表...

          也許更好的辦法是干脆用xml數(shù)據(jù)庫.  回復(fù)  更多評(píng)論   

          # re: 討論:動(dòng)態(tài)產(chǎn)生的持久模型和數(shù)據(jù)存儲(chǔ)的設(shè)計(jì)模式 2006-07-03 11:02 路過無名

          iBatis可以解決你的問題。別一條路走到黑嘛  回復(fù)  更多評(píng)論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

          <2006年4月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          統(tǒng)計(jì)

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 乐安县| 闵行区| 同心县| 乐都县| 图们市| 葵青区| 格尔木市| 内丘县| 安平县| 宣武区| 吉隆县| 宿州市| 巴彦淖尔市| 扶余县| 尼勒克县| 团风县| 梨树县| 镇坪县| 玉山县| 都安| 鲁甸县| 开原市| 精河县| 襄汾县| 黎川县| 犍为县| 多伦县| 佳木斯市| 南溪县| 若尔盖县| 巴彦淖尔市| 禹州市| 高青县| 神农架林区| 江津市| 郴州市| 东宁县| 黔东| 马尔康县| 临湘市| 涞源县|