mis98zb

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            7 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks
          以前用WebWork的時(shí)候,因?yàn)檫x擇了xml + xslt的方式,所以就要把object映射到xml。
          最初想偷偷懶,不打算使用配置文件。于是就自己寫(xiě)了一個(gè)obj2xml,遇到了兩個(gè)問(wèn)題:

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

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


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

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

          評(píng)論

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

          另外get方法如果沒(méi)有對(duì)應(yīng)的屬性,那么此get方法會(huì)被忽略,避免垃圾信息的污染.  回復(fù)  更多評(píng)論
            

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

            回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 凌海市| 田阳县| 沂源县| 十堰市| 芦溪县| 兴文县| 格尔木市| 安顺市| 余庆县| 怀仁县| 五峰| 河曲县| 西乌| 丰原市| 晋城| 凤冈县| 泰宁县| 天祝| 仁怀市| 沭阳县| 和龙市| 昌黎县| 桑日县| 青浦区| 山丹县| 黎川县| 洪雅县| 阿鲁科尔沁旗| 托里县| 昆山市| 临澧县| 司法| 仪征市| 吴川市| 贵南县| 阿拉善左旗| 小金县| 连江县| 阜康市| 英吉沙县| 马公市|