談到解耦,就要提到設計模式,設計模式來源于分析模式,設計模式是分析模式的具體現話。 舉個例子,我們購買一個大件,像冰箱。
從客觀的角度分析,這種東西不是我們直接拿走的,那么我們簡化這個流程就是:你選擇冰箱,給錢,然后營業員給你生成訂單,送貨人發貨。如果說我們把選擇冰箱,下單付款,送貨期間作為粉色的時間,然后,我中間牽扯到的營業員,送貨人,客戶這類的參與者作為綠色,最后中間的權限例如業務員收錢的時候,從數據考慮,他是操作財務表的權限,訂單是操作訂單表的權限,這部分權限作為黃色,在領域模型中,在客觀世界中是綠色賦予了黃色在粉色期間執行操作。客觀總結起來就是指定人,擁有指定權限,做指定的操作
從三層的角度分析,我們是有數據表的,用戶表,訂單表,送貨表等等,在數據層和業務層到底分離的是什么,還是這個購物的例子,打個不恰當的比方:業務員收錢,為其生成訂單,實際上就是在操作數據,那么數據層拿走了這部分的工作。剩下的工作是,業務員哪兒來的收錢和操作財務權限?業務員怎么知道是誰要購買(誰是參與者)?這些就交給了邏輯層。
將不同的職責封裝到不同的類或者模塊中,不正是面向對象的基本原則之一嗎(單一職責原則)。但我們使用抽象工廠的設計模式時,降低了數據層和邏輯層之間的依賴關系,創建對象依賴于工廠類和一套抽象接口,依賴倒置的核心思想就是抽象。上層模塊調用接口,下層模塊實現接口。
說到這里是解耦的過程,那么解耦的意義呢?
就像我們開發過程中一個人,從前臺到后臺到維護,到數據庫全管,就不如分工合作,內部的聯系越少,一個系統就越穩定,俗話說,多一個事不如少一事。還是用實際的來說話:業務是會變化的,但是操作數據庫,終歸是那些方法,業務改變的時候,我們無需改變數據層。即使需要新的數據層方法,也只是添加一個方法,無需改變業務層的舊代碼。剛才我們所說的又好像是分工的好處?其實來說,三層本身就是一個解耦的架構,三層的本身也是為可擴展性而生的,只是我們還需要繼續使用各種模式解耦,我們只能無限降低耦合度,但并不能根除,因為彼此失去了關聯就是去了意義。開放封閉原則說道:軟件實體(類,模塊,方法等)應該是可擴展的,意思是軟件模塊的功能可以變化,但是在拓展新功能的同時,不需要修改原有代碼,更不會影響到原有代碼。怎么能做到開放和封閉呢?還是抽象。抽象的東西是穩定的,通常不需要修改,抽象的東西可以具體化為不同的實例,實現擴展。
中國夢就是個很好的面向對象設計。
中國夢可拓展:它可以拓展為農民的中國夢(擁有自己的土地),商人的中國夢(生意興隆等),運動員的中國夢(成為冠軍)
中國夢很穩定:雖然夢想千差萬別,但最終都可以歸于不變的中國夢。夢想的基類永不變。
2015-7-18補充
在團隊開發中,在無需過多了解其它層次的基礎上,可以將某一層作為一個有機的整體來理解,例如無需知道以太網的工作細節,照樣可以再TCP上構建FTP服務。
【摘抄自---企業應用架構模式】
一旦構建好某一層次,就可以用它為很多上層服務提供支持。因此,TCP/ip同時被FTP,telnet,SSH,HTTP使用。否則,所有這些高層協議都必須編寫他們各自的底層協議。
【摘抄自---企業應用架構模式】
新聞熱點
疑難解答