不做反應(yīng);同樣,如果在連接建立和偵聽狀態(tài),可以進行Close (),在連接建立狀態(tài)可以進行Acknowledge (),即接收數(shù)據(jù)。
對于這樣的狀況,最不可取的設(shè)計應(yīng)該是用一系列的Switch 語句(甚至If/else 語句)進行Hard 設(shè)計,對于以后每一次需求改變,都需要改變源代碼,接踵而來的系統(tǒng)一致性、文檔更新等工作將使開發(fā)人員不可避免地陷入一場災(zāi)難,這樣的后果將導(dǎo)致原來就不合理的設(shè)計變得更加支離破碎,系統(tǒng)維護的代價將越來越大;就算沒有需求變更發(fā)生,這些設(shè)計的可重用性也會極差。
稍好一些的設(shè)計是預(yù)先估計并設(shè)置TCPConnection 類所有可能的狀態(tài),并預(yù)先加入設(shè)計,這種需要付出更多的設(shè)計、開發(fā)、維護的代價,而且也很難達到完美的效果,所以不多說了。
下面介紹一種經(jīng)典的設(shè)計思路,這種設(shè)計可以充分體現(xiàn)“為(系統(tǒng))將來改變預(yù)留接口”的可擴展性(Extensible-Design )思想,并且很好的實現(xiàn)了這一思想。在這里,我們引入一個抽象類TCPState 來代表TCPConnection 類的狀態(tài),給出具體各種狀態(tài)的通用操作接口,并派生出不同的子類(實現(xiàn)具體的操作)去實現(xiàn)TCPConnection 類的不同狀態(tài),例如派生TCPEstablished 類來實現(xiàn)TCPConnection 類的連接建立狀態(tài)。
只需要在TCPConnection 類中包含一個TCPState 的狀態(tài)引用,并在TCPConnection 的狀態(tài)改變時更新為當前的狀態(tài)引用,例如在連接關(guān)閉時進行Open (),狀態(tài)引用就應(yīng)該從TCPClosed 變成TCPEstablished ,這樣就實現(xiàn)了原來的要求。
但這個設(shè)計思路的意義遠不止于此。我們可以看到,抽象類TCPState 已經(jīng)為TCPConnection 類將來可能的狀態(tài)留出接口,只需要不斷派生具體的不同狀態(tài)子類就可以實現(xiàn)將來的狀態(tài)變更,并且無須影響原有的設(shè)計,也無須加入多余的代碼來實現(xiàn)現(xiàn)在還不需要的功能,所以這是一個優(yōu)美的、可擴展的設(shè)計思路,非常清晰,易于維護,相信可以給我們在做軟件設(shè)計時帶來一些啟發(fā)。
系統(tǒng)應(yīng)該采用Open 的技術(shù)標準
采用SOA 的開發(fā)架構(gòu),是進一步降低系統(tǒng)耦合度的措施在經(jīng)典軟件工程理論中,不管是瀑布方法還是原型方法,都是從需求分析做起,一步一步構(gòu)建起形形色色的軟件系統(tǒng)。但是,需求變更像一個揮之不去的陰影,時刻伴隨著系統(tǒng)左右。每一個實際應(yīng)用系統(tǒng)的開發(fā)者都飽嘗了在系統(tǒng)進入開發(fā)階段、測試階段,甚至上線階段遭遇應(yīng)接不暇的需求變更的極端痛苦。客戶將變更的需求視為bug(錯誤)是測試上線階段的主要問題。
如何解決這一問題?能否來一場軟件開發(fā)和架構(gòu)的革命?SOA架構(gòu)的提出,就是被人看成這樣的一場革命。其實質(zhì)就是要將系統(tǒng)模型與系統(tǒng)實現(xiàn)分割開來。
1.定義
SOA并不是一個新概念,有人就將CORBA和DCOM等組件模型看成SOA架構(gòu)的前身。早在1996年,Gartner Group就已經(jīng)提出了SOA的預(yù)言,不過那個時候僅僅是一個“預(yù)言”,當時的軟件發(fā)展水平和信息化程度還不足以支撐這樣的概念走進實質(zhì)性應(yīng)用階段。到了近一兩年,SOA的技術(shù)實現(xiàn)手段漸漸成熟了。在BEA、IBM等軟件巨頭的極力推動下,才得以慢慢風(fēng)行起來。Gartner為SOA描述的愿景目標是實現(xiàn)實時企業(yè)(Real-Time Enterprise)。
關(guān)于SOA,目前尚未有一個統(tǒng)一的、業(yè)界廣泛接受的定義。一般認為:SOA,面向服務(wù)的架構(gòu)是一個組件模型,它將應(yīng)用程序的不同功能單元----服務(wù)(s
項目經(jīng)理勝任力免費測評PMQ上線啦!快來測測你排多少名吧~
http://opto-elec.com.cn/pmqhd/index.html