基本上轉(zhuǎn)換erwin的xml文件的python程序已經(jīng)就緒了,但是在寫程序和考慮問題的這幾天里我反而有些糊涂起來,關(guān)于程序的設(shè)計(jì)和設(shè)計(jì)的選擇一直困擾著我。
說到那個(gè)python程序,我已經(jīng)重寫了很多遍了,Martin最初的那個(gè)程序其實(shí)很簡(jiǎn)單,他的需求其實(shí)也沒有那么難,但是我把程序?qū)戇^幾遍以后發(fā)現(xiàn)了一個(gè)問題:我每一次都可以用完全不同的思路來解決這個(gè)問題,以至于我的程序都完全不一樣。我可以完全使用python內(nèi)置的dict和tuple對(duì)象來存儲(chǔ)所有的Entity、Attribute、Key和Relation的信息,我也可以做一個(gè)Classitis,把所有能看到的結(jié)構(gòu)都映射成為class defination,我甚至也想過functional的解法:利用一個(gè)map結(jié)構(gòu),讓每一個(gè)節(jié)點(diǎn)的數(shù)據(jù)通過一個(gè)方法的管道,然后在管道的另外一邊讀取我需要的信息……
在Java里面,一切都很簡(jiǎn)單,我只需要定義interfaces,他們必須遵守的契約,然后我可以在實(shí)現(xiàn)類里面實(shí)現(xiàn)我的解析過程,構(gòu)造出我想要的對(duì)象結(jié)構(gòu),一切都順理成章,我可以利用interface來隔離各個(gè)模塊之間的耦合,比如對(duì)某一個(gè)parser的依賴關(guān)系,對(duì)于特定dom版本的依賴關(guān)系,對(duì)于dom的依賴(我想這個(gè)需求是合理的,因?yàn)槲覀兺耆赡芤驗(yàn)閮?nèi)存消耗的原因而轉(zhuǎn)換到sax),甚至對(duì)于xml文件的依賴(當(dāng)然,這樣我的設(shè)計(jì)就走得太遠(yuǎn)了),然后通過IOC的方式把他們粘合在一起,我的程序就完成了。甚至于我可以這樣說,也許我的實(shí)現(xiàn)是naive的,也許我的代碼是低效的,但是我的思路是正確的,至少,reasonable。
在python里面我找不到這種感覺:我覺得無論哪一條路都是可行的,OO的方法,functional的方法,甚至于過程化的方法都是可行的,然而又都是不太完美的,我也許可以使用在java里的經(jīng)驗(yàn),但是我隱隱約約覺得會(huì)有更好地解決方案,由于這樣的原因(也許因?yàn)閼卸瑁覜]有做那樣的嘗試,怎么說呢,我覺得那樣興師動(dòng)眾的方法在一個(gè)動(dòng)態(tài)語言里太——不優(yōu)雅了。在我多少了解一點(diǎn)functional語言和方法之后我尤其感到如此,那么我是不是在一條正確的道路上行走呢?我是不是應(yīng)該繼續(xù)我的杞人憂天,還是埋頭在代碼之中,直到“理性之光”突然降臨呢?
總有一天,我會(huì)弄明白的。
說到那個(gè)python程序,我已經(jīng)重寫了很多遍了,Martin最初的那個(gè)程序其實(shí)很簡(jiǎn)單,他的需求其實(shí)也沒有那么難,但是我把程序?qū)戇^幾遍以后發(fā)現(xiàn)了一個(gè)問題:我每一次都可以用完全不同的思路來解決這個(gè)問題,以至于我的程序都完全不一樣。我可以完全使用python內(nèi)置的dict和tuple對(duì)象來存儲(chǔ)所有的Entity、Attribute、Key和Relation的信息,我也可以做一個(gè)Classitis,把所有能看到的結(jié)構(gòu)都映射成為class defination,我甚至也想過functional的解法:利用一個(gè)map結(jié)構(gòu),讓每一個(gè)節(jié)點(diǎn)的數(shù)據(jù)通過一個(gè)方法的管道,然后在管道的另外一邊讀取我需要的信息……
在Java里面,一切都很簡(jiǎn)單,我只需要定義interfaces,他們必須遵守的契約,然后我可以在實(shí)現(xiàn)類里面實(shí)現(xiàn)我的解析過程,構(gòu)造出我想要的對(duì)象結(jié)構(gòu),一切都順理成章,我可以利用interface來隔離各個(gè)模塊之間的耦合,比如對(duì)某一個(gè)parser的依賴關(guān)系,對(duì)于特定dom版本的依賴關(guān)系,對(duì)于dom的依賴(我想這個(gè)需求是合理的,因?yàn)槲覀兺耆赡芤驗(yàn)閮?nèi)存消耗的原因而轉(zhuǎn)換到sax),甚至對(duì)于xml文件的依賴(當(dāng)然,這樣我的設(shè)計(jì)就走得太遠(yuǎn)了),然后通過IOC的方式把他們粘合在一起,我的程序就完成了。甚至于我可以這樣說,也許我的實(shí)現(xiàn)是naive的,也許我的代碼是低效的,但是我的思路是正確的,至少,reasonable。
在python里面我找不到這種感覺:我覺得無論哪一條路都是可行的,OO的方法,functional的方法,甚至于過程化的方法都是可行的,然而又都是不太完美的,我也許可以使用在java里的經(jīng)驗(yàn),但是我隱隱約約覺得會(huì)有更好地解決方案,由于這樣的原因(也許因?yàn)閼卸瑁覜]有做那樣的嘗試,怎么說呢,我覺得那樣興師動(dòng)眾的方法在一個(gè)動(dòng)態(tài)語言里太——不優(yōu)雅了。在我多少了解一點(diǎn)functional語言和方法之后我尤其感到如此,那么我是不是在一條正確的道路上行走呢?我是不是應(yīng)該繼續(xù)我的杞人憂天,還是埋頭在代碼之中,直到“理性之光”突然降臨呢?
總有一天,我會(huì)弄明白的。