|
實現(xiàn)的功能:定期搜索發(fā)送任務表,按照指定的電話號碼,發(fā)送指定內(nèi)容,支持小靈通。
涉及到的內(nèi)容:程序?qū)Χ绦旁O(shè)備的控制,pdu編碼解碼,設(shè)計模式
遇到的問題:
1、短信設(shè)備提供的是串口接口,因為傾向于跨平臺運行這個軟件,所以采用了java作為開發(fā)工具,但是帶來的問題是java對window和linux平臺提供的串口api不同,方法也不一樣,而且如果以后根據(jù)需要,增加短信設(shè)備的話,也受到服務器提供的串口的限制。所以采用了以太網(wǎng)控制方式,為短信設(shè)備增加了一個RS232轉(zhuǎn)RJ45的32口串口服務器這樣就可以通過以太網(wǎng)來控制串口設(shè)備了,而且串口設(shè)備可以無限增加。但是這樣又帶來了另一個問題:發(fā)送什么格式的數(shù)據(jù)包才能被串口設(shè)備識別呢?我在這個地方花了些時間,串口以太網(wǎng)轉(zhuǎn)換器隨機附帶了一個串口模擬軟件,運行后可以從超級終端控制短信設(shè)備,然后根據(jù)這個線索,使用wireshark抓包工具對通訊中的包進行了分析,找到了對短信設(shè)備初始化的格式包,問題解決。
2、設(shè)計模式真是個好東西,優(yōu)雅的解決事務問題。使用觀察者模式負責對短信設(shè)備的監(jiān)聽,代碼簡約干凈,使用工廠模式,解決了對象創(chuàng)建混亂的問題。
3、項目初步完成后,領(lǐng)導又連續(xù)提出了新的要求,需要短信設(shè)備完成的功能更多了,幸虧當時把短信監(jiān)控發(fā)送單獨抽取了出來,哈哈,只要把需要短信設(shè)備完成的工作添加入發(fā)送表就可以了,但是如何管理這些增加的任務呢?每提出一個要求就寫一個程序也太累了,而且以后如果數(shù)量增加了,管理也是一個難題。我充分利用了java的反射功能,首先寫了幾種模式的任務類,然后在xml配置文件里對這些類進行配置,任務程序運行時首先讀取xml,根據(jù)配置生成任務組,并且實例化,以多線程的方式運行這些類。嘿嘿,順便配了個短信鬧鐘,每天早晨給我發(fā)短信叫我起床。
心得:擺脫數(shù)據(jù)庫對思維的限制,擺脫寫軟件先設(shè)計表,考慮表結(jié)構(gòu)的思想,運用面向?qū)ο蟮乃季S方式,把主要精力轉(zhuǎn)移到完成主要功能上來,另外任務模塊在設(shè)計上還不完善,找時間改成組合模式,這樣任務的耦合度就更小了,還有,是不是增加個網(wǎng)絡服務功能呢?開個端口監(jiān)聽請求,根據(jù)請求完成任務,或者是采用ejb的方法,分布式?各有優(yōu)缺點,網(wǎng)絡服務方式好處是通用性好,無論采用什么語言開發(fā)的,都可以調(diào)用,方便其他同事以后的開發(fā),分布式的好處是可以遠程調(diào)用java對象,以后開發(fā)起來更靈活,功能更強大,可以組合各種功能組件快速實現(xiàn)任務,而且組件積累到一定的量,就會從量變到質(zhì)變,到時候會發(fā)生什么呢?沒想好,繼續(xù)!繼續(xù)!!
|
|