mis98zb

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            7 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks
          以前用WebWork的時候,因為選擇了xml + xslt的方式,所以就要把object映射到xml。
          最初想偷偷懶,不打算使用配置文件。于是就自己寫了一個obj2xml,遇到了兩個問題:

          ☆首先就是環的問題。
          xml是樹形結構,不允許出現環的。而對象關系中,很容易出現環。比如
          Parent.getChildren();
          Child.getParent();
          這樣的代碼。
          我的解決方法是,在映射的時候,用hash map保存一個class到已知obj列表。不在已知列表里的,就先映射,然后加到已知obj列表里。在已知列表里的,就不再映射了。這樣速度挺快,查找也方便。這個問題還算好解決。

          ☆接下來就是垃圾信息的屏蔽。
          我是用get*來映射的(當然,集合類型會有特殊的處理)。
          但是,get*方法中赫然有getClass存在!而Class類又有一堆get方法!這還算好辦,直接屏蔽掉Class類型好了。
          問題在于用戶自己的一些無用信息。比如
          DomainObject.getXXXService();
          XXXServiceImpl.getYYYDAO();
          YYYDAO.getZZZDAOSupport();
          還有就是多余的信息。比如我只想得到用戶的基本信息,可是
          class?Person?{
          ????getName();
          ????getAge();
          ????getBirthday();
          ????getEducationRecord();
          }


          class?EducationRecord{
          ????getMildSchool();
          ????getUnivercity();
          }
          這樣一來,本來不需要的教育的信息就會被映射到。由于Person對象可能會關聯到很多對象,那樣就會有很多無用的信息被包含進來。
          對于這種情況,首先的想法就是LazyLoading。對于一般的使用,這是沒有問題的。但是我的需求是要把XML發送到客戶端。客戶端會使用XML中的哪些數據,我的映射程序沒有辦法捕捉到。因此LazyLoading就毫無用武之地了。
          沒有辦法,只能把責任推倒對被映射的object,讓它注意不要包含無用的數據。可是這樣一來,就要專門為映射準備一些bean,然后用BeanUtil給他們賦值,再傳遞給obj2xml。

          最后實在沒有辦法,干脆徹底拋棄我的obj2xml,自己寫了一個xmlResult,使用vm來生成xml。
          雖然為需要寫一些vm,但是比起專門準備一堆bean再用obj2xml映射,還是要簡單直接一些。
          可能這也是沒有什么特別好用的obj/xml映射工具的原因吧!
          posted on 2006-05-04 09:00 mis98zb 閱讀(1279) 評論(2)  編輯  收藏 所屬分類: java

          評論

          # XStream對循環引用的處理 2006-05-04 09:22 sharkmao
          <Child>
          <name>child</name>
          <parent>
          <name>parent</name>
          <child reference="../.."/>
          </parent>
          </Child>

          另外get方法如果沒有對應的屬性,那么此get方法會被忽略,避免垃圾信息的污染.  回復  更多評論
            

          # re: 關于Object到XML映射的一點想法 2006-05-06 20:16 mis98zb
          多謝sharkmao指教!

            回復  更多評論
            

          主站蜘蛛池模板: 广德县| 富顺县| 杭州市| 衡东县| 建宁县| 普定县| 香河县| 孝昌县| 高要市| 花垣县| 曲水县| 宁武县| 新巴尔虎左旗| 应用必备| 定州市| 阳高县| 高阳县| 民乐县| 富宁县| 湘乡市| 农安县| 洛扎县| 泰顺县| 拜城县| 江北区| 平定县| 仁化县| 太保市| 万山特区| 遂昌县| 普定县| 东丽区| 瑞昌市| 岳阳市| 景宁| 芮城县| 苏尼特右旗| 钟祥市| 吴川市| 大方县| 南江县|