<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    潛魚在淵

    Concentrating on Architectures.

    posts - 77, comments - 309, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    On Demand ORM

    Posted on 2006-01-12 00:39 非魚 閱讀(3251) 評論(3)  編輯  收藏 所屬分類: 面向對象設計
        我對RAD不感興趣。因為RAD提供了太多的東西,而其中我會用到的大概不超過20%,其余的80%包括了我不想要的功能、BUG和雜亂的生成代碼。就象 一個人只能吃一碗飯,RAD給了他兩碗;如果真的是飯還好說,大不了放到餿掉或者倒掉,可惜RAD總是強迫你吃下去。

        我對ORM也是這樣的看法。

        所有人對ORM都有一個簡單的印象:減少對象持久化過程中的編碼。不管使用什么方式,所有ORM工具都做到了這一點,但這似乎還不能滿足我們的要求。

        我們會怎樣處理持久化對象呢?基本上是下列情況:

    1. 找到感興趣的對象集;
    2. 查看這個集合中所有對象的部分信息,或者
    3. 查看特定對象的全部信息,或者
    4. 查看特定對象的部分信息,或者
    5. 處理特定對象或對象集合的全部信息,或者
    6. 處理特定對象或對象集合的部分信息;
    7. 把處理過的對象保存到數據庫中。
        在上面這些情況中,很少會用到一個對象的全部信息,多數情況下,我們只會使用、更新一個對象的部分信息。通常我們會這樣說:“ORM,我需要一個對象,但 是我只關心這個對象中的FIELD1,FIELD2,FIELD5的信息。”實際上我們希望象使用SQL語句一樣來使用ORM。例如在一個典型的使用工作流的環境中,每個環節一般只會用到對象的一部分信息。

        對象和關系數據庫對信息的組織方式是不同的。對象的粒度可能會比數據庫的記錄要細,數據庫基于效率考慮,可能會把信息集中存儲。一些直接映射表記錄到對象的ORM在這里可能會遇到麻煩。

        ORM的實現者總是考慮提供完整的對象,而習慣于SQL語句的開發者又希望得到自己請求的結果——可能是一個對象的部分信息。盡管LAZY LOAD也有很大的幫助,但開發者更想它能夠LAZY到任意字段級別。

        在受益于ORM的簡化數據庫訪問的同時,我們不希望ORM給我們帶來性能方面的影響。這種恐懼時刻存在于我們心中:萬一將來發生性能問題,我們如何象優化 SQL一樣來優化ORM?更進一步想,如何在應用規模逐漸膨脹的情況下,有效的管理使用ORM的應用的可修改性?如何在負載遞增的情況下保證使用ORM的 應用的可伸縮性?當在項目的后期發現一個具有侵入性的ORM不能再適應應用的規模和可伸縮性要求時,恐怕沒有人 不頭痛吧?

        我想要的ORM是一個On Demand ORM。就象下面這樣寫代碼:

     1 public void mthod1() {
     2   User user = ODORM.request("name;password""pk=test");
     3   List groups = ODORM.requestList(Group.class,   "groupid;groupname""groupname like 'test%'");
     4   // after end user set the user groups
     5   user.setGroups(groups);
     6   ODORM.save(user);
     7   // sometimes do some more process.
     8   if ()
     9   method2(user);
    10 }
    11 
    12 public void method2(User user) {
    13   // securityLevel property should be loaded on   demand by ODORM mechanism.      
    14   user.setSecurityLevel(user.getSecurityLevel()+1);    
    15   ODORM.save(user);
    16 }

        自然管理MAPPING是ORM的本份,我只是想它更靈活一點。拋磚引玉,想聽聽大家的想法。

    評論

    # re: On Demand ORM  回復  更多評論   

    2006-01-12 01:56 by 郁也風
    最近也在考慮mapping工具選型,本來是傾向于hiberante,不過隨著考慮的深入,反倒越來越傾向于ibaties了。

    對我來說,以下幾點需要考慮:
    1、入門臺階。相信每個項目負責人都不喜歡搞些難度較大的技術在自己項目中折磨那些新人;
    2、歷史項目。我們都知道的一點是hibernate的實現模式導致它在歷史項目中的引入極為困難(新版是否在這方面有所增強,不太了解);
    3、技術選型的穩定性。對于開源項目或是大家的練手項目來說,什么新就用什么,但對于一個公司的項目選型則關系較大,因為涉及到將來很長一段時間在公司的應用推廣培訓;
    4、非魚同志上面說的那些。

    # re: On Demand ORM  回復  更多評論   

    2006-01-12 09:45 by GHawk
    越是需要操作的靈活性,對象映射的對象性自然就會下降。這樣倒不如不用ORM,直接寫JDBC和SQL,但是這對整個系統的架構會產生很大的影響。要指望Mapping和持久層沒有性能損失是做不到的。就像吃海鮮,你越是要新鮮的海鮮,就越要放棄復雜的加工和運輸手段。這個問題的解決可能不是ORM能夠勝任的,或許更大程度上依賴于數據庫系統。
    軟件設計是一種trade-off,技術本身沒有優劣之分。工程師所要做的就是如何把各種技術融合到一起。性能或是對象性操作的獲得也遵循這一原則。

    # re: On Demand ORM  回復  更多評論   

    2006-03-10 18:04 by gchhua
    軟件設計確實是trade-off,只存在合適與否,不存在優劣。就如模式的一個重要條件:適用的上下文
    主站蜘蛛池模板: 久久久久亚洲精品影视| 亚洲国产精品嫩草影院久久| 少妇中文字幕乱码亚洲影视 | 在线观看国产区亚洲一区成人| 精品亚洲成a人在线观看| 国产乱人免费视频| 精品在线观看免费| 亚洲伊人久久综合中文成人网| 一本一道dvd在线观看免费视频| 亚洲精品久久久www| 2022免费国产精品福利在线| 亚洲午夜国产精品无码老牛影视| 日韩精品免费视频| 亚洲综合一区二区精品导航| 国产成人免费午夜在线观看| 亚洲一区二区久久| 在线观看免费为成年视频| 337p日本欧洲亚洲大胆人人| 亚洲AV伊人久久青青草原| 久久九九免费高清视频| 亚洲天堂一区二区| 好男人看视频免费2019中文| 狠狠入ady亚洲精品| 亚洲中文字幕无码永久在线 | 国产特黄一级一片免费 | 一级毛片视频免费| 亚洲AV无码专区国产乱码4SE| 免费能直接在线观看黄的视频| 色天使亚洲综合在线观看| 亚洲欧洲日本在线| 91大神在线免费观看| 亚洲乱妇老熟女爽到高潮的片| 久久久久亚洲av毛片大| 国产成人精品免费视| 曰批免费视频播放在线看片二 | 国产成人亚洲合集青青草原精品| 国产真实伦在线视频免费观看| 你是我的城池营垒免费观看完整版| 亚洲精品**中文毛片| 免费中文字幕在线观看| 久久精品毛片免费观看|