一個(gè)解析文本中的信息并向?qū)ο筚x值過程的思考.
首先解釋一下,文本中的信息指的是 對(duì)象在文本文件中的描述,如"名稱:Bill 職位:SSE 年齡:45 薪水:10000"這個(gè)形式的.要求把這樣的信息轉(zhuǎn)換到對(duì)象Member中,對(duì)錄入出錯(cuò)的情況如年齡薪水有非數(shù)字字符需要加以鑒別.
對(duì)象基本信息如下:

















從這段字符串中找到相關(guān)的信息并設(shè)置到Member對(duì)象的相關(guān)屬性中并不難,但有幾個(gè)地方需要多加考慮:
1.名稱職位薪水年齡的順序不一定一致.
2.職位薪水年齡三個(gè)字段和值有可能沒有.
3.有可能需要增加字段,此時(shí)類也需要修改.
處理程序需要考慮解析,驗(yàn)證,賦值三個(gè)環(huán)節(jié),如果耦合在一起處理當(dāng)然也能做出來,但這樣做可讀性和可維護(hù)性都不好,也背離了面向?qū)ο蟮某踔?好的方案應(yīng)該把這三部分分開制作函數(shù)處理.
文本解析部分:
我的想法是首先將"名稱:Bill 職位:SSE 年齡:45 薪水:10000"以空格劈分成包含這樣元素的鏈表:
名稱:Bill
職位:SSE
年齡:45
薪水:10000
然后在用冒號(hào)":"劈分單個(gè)元素,前半部分作為鍵,后半部分作為值,放入一個(gè)Hashtable中:
key value
名稱 Bill
職位 SSE
年齡 45
薪水 10000
解析部分代碼如下:





















賦值和驗(yàn)證部分:
然后把這個(gè)Hashtable傳入到Member的一個(gè)函數(shù)setHtToProperties中,這個(gè)函數(shù)的任務(wù)是對(duì)Hashtable中的鍵值對(duì)進(jìn)行遍歷,在調(diào)用函數(shù)setValueToProperty對(duì)字段進(jìn)行賦值:
代碼如下:



























































建立setValueToProperty函數(shù)的初衷是,用分支語句建立起鍵值與字段的對(duì)應(yīng)關(guān)系,對(duì)應(yīng)上了則進(jìn)行賦值,這和Mapping有點(diǎn)類似,有些轉(zhuǎn)化和驗(yàn)證工作也在分支內(nèi)進(jìn)行,只要驗(yàn)證出現(xiàn)問題即退出處理.
這樣的處理方法帶來了如下好處:
1.外界的類只需要解析文本,不需也不應(yīng)該知道如何向Member的對(duì)應(yīng)字段賦值,這個(gè)工作應(yīng)該由Member自己進(jìn)行,setHtToProperties函數(shù)幫助達(dá)成了這一點(diǎn),有效降低了Member和其它類的耦合程度.
2.即使職位薪水年齡三個(gè)字段和值缺失,也不影響其它字段的賦值過程.
3.如果增加字段,setValueToProperty函數(shù)中只需要增加一個(gè)Mapping分支即可,其它地方無須改動(dòng).
4.對(duì)數(shù)據(jù)的校驗(yàn)工作可以統(tǒng)一在setValueToProperty函數(shù)中完成.
完整代碼下載:
http://www.aygfsteel.com/Files/sitinspring/MemberProcessor20071207163615.rar
posted on 2007-12-07 16:35 sitinspring 閱讀(496) 評(píng)論(0) 編輯 收藏 所屬分類: Object Orient Programming