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指教!

            回復  更多評論
            

          主站蜘蛛池模板: 崇左市| 新巴尔虎右旗| 昭通市| 晋江市| 新密市| 西城区| 南平市| 司法| 五华县| 三穗县| 乐山市| 临潭县| 建湖县| 滁州市| 稻城县| 尼勒克县| 密云县| 称多县| 区。| 同仁县| 增城市| 克山县| 且末县| 南溪县| 万安县| 板桥市| 大渡口区| 金湖县| 大方县| 榆社县| 信宜市| 林西县| 盈江县| 清徐县| 淮滨县| 亚东县| 西贡区| 阿克陶县| 论坛| 香河县| 阿巴嘎旗|