做過DOS編程的人都知道,Dos編程和Window編程最大不同之一就是事件機制的編程,普遍的,目前事件機制的使用已經在Windows下的應用程序中遍地開花了,可是基于事件傳播的應用僅僅限于window應用程序嗎?答案是:不。 在IOC概念的不斷沖擊下,我們需要回頭去審視前兩年自己開發(fā)的,心中為之驕傲的,認為非常優(yōu)秀的程序,在這過程中,我們就會看到這些驕傲在最新的概念沖擊下煙消云散了。變成了丑陋的,緊耦合的反面范例。讓我們來看看以下場景:
某公司有基于某平臺的兩子系統(tǒng),訂購系統(tǒng)A和財務系統(tǒng)B。當采購員在預采購某物品前,先在定購系統(tǒng)A中登記需要購買的貨物和價格,然后財務系統(tǒng)B就開始該筆購物款項的申請流程。 首先讓我們來看看兩年前的代碼是怎么實現(xiàn)的:
從上面的代碼中可以很明顯看到,定購系統(tǒng)A和財務子系統(tǒng)發(fā)生了耦合,也許有同志說,那我采用Spring等IOC框架來解耦:
財務子系統(tǒng)B的實現(xiàn)FinancialServiceImpl是通過Spring等IOC框架設置進去的。這樣不是很完美了嗎?
但是我仍然要說,這個只是五十步笑百步罷了。再請看以下場景:該公司的業(yè)務規(guī)則起了變化,金額少于1萬元的定購不需要通過財務申請流程。這樣財務子系統(tǒng)B升級到B2了,多了一個直接撥款的API payMoney()。這時候,定購系統(tǒng)該怎么辦?除了修改代碼沒有別的辦法。這個時候,基于事件分發(fā)處理的機制就大派用場了。 修改原來的訂單系統(tǒng)實現(xiàn)下單消息的廣播。
實現(xiàn)一個消息監(jiān)聽器:
在配置中設置(這里我們使用的是Spring) <bean id="orderService" ...> <property name="eventListener"> <list> <ref local="orderListener"/> </list> </property> </bean> <bean id="orderListener" ...>
這樣我們就實現(xiàn)了訂單系統(tǒng)和財務系統(tǒng)的解耦,如果財務系統(tǒng)發(fā)生的修改,我們就只需實現(xiàn)新的監(jiān)聽器就可以了:
下一篇文章,我將引入AOP的概念來將系統(tǒng)提高到更高的抽象層次。 (全文完)
posted on 2005-12-05 20:31 wolfsquare 閱讀(2306) 評論(4) 編輯 收藏 所屬分類: 企業(yè)應用
Powered by: BlogJava Copyright © wolfsquare