目前分布式應用軟體越來越多,但在如何平衡分布式應用和單機應用的處理效能有一些麻煩。另外就是從一種分布式技術遷移到另一種分布式技術也很困難。乙個原因就是我們的上層應用**和底層的分布式技術(
corba,ice,socket
corba,ice,socket
等具體分布式技術不是核心,核心是我們的客戶需要的業務功能。
下面以corba
和socket(asn.1協議)
為例子說明這種分離架構。
1.所有業務功能都通過介面定義;
2.所有使用業務功能的**都必須通過介面工廠獲取業務介面的例項
介面+類工廠的方式。保證任何乙個業務模組(元件)對外(包括大平台內部各個業務模組或元件之間)提供的所有服務都是介面,同時提供類工廠讓外部訪問業務模組(元件)中某個介面的實現。
說明:1)
iexpand
是需要外部定製的介面,當然可能存在多個,如果乙個業務模組(元件)不需要外部定製,就不存在這個介面了;2)
iplatform
是提供外部使用的功能介面,當然可能存在多個;
3)iplatformfactory
是類工廠的介面,類工廠也用介面定義,是因為需要對外遮蔽底層通訊細節,比如
asn.1,corba
等;當然這個介面的定義應該是很少變化的;一般而言,乙個業務模組或元件只需要乙個類工廠的介面定義;
4)tfactory
是乙個類工廠的實現,這是外部唯一可見的乙個實現類。
5)platformimpl
是乙個內部用標準
c++開發的乙個功能實現體,它對外部是不可見的。
所有業務都是利用這個核心架構來實現,下面考慮
corba
,asn.1
介面的適配方式,這兩種方式都有乙個共同點:都可以看作是
client/server
結構,需要我們提供
client/server
兩端的外部介面
利用adaptor
和delegate
模式來遮蔽
corba
技術細節。
說明:1)
iserveridl
利用idl
語言定義
iplatform
這個介面,是外部不可見的;
2)corbaserverimpl
從iserveridl
和iplatform
繼承下來,將
iserveridl
的任何呼叫轉調
iplatform
的介面實現;同時
corbaserverimpl
還使用委託模式,將
iplatform
的介面呼叫轉調給
platformimpl
來實現,這樣
corbaserverimpl
在實現corba
物件的時候僅僅是將
corba
資料結構轉換為標準
c++的介面,將
corba
呼叫轉換為普通的
c++api
介面呼叫,它內部沒有複雜的業務邏輯,實現非常簡單
3)tcorbaserve***ctory
是內部負責建立
corbaserverimpl
物件,外部完全看不到
corba
的任何資訊
4)這裡沒有標出
iexpand
介面,因為它與
corba
任何細節無關
採用delegate
模式來實現
說明:1)
iclientidl
是利用idl
定義的iplatform
介面,這是
idl編譯器編譯後的客戶端的介面,這是外部不可見的
2)corbaclientimpl iplatform
同時繼承,將
iplatform
介面的都轉呼叫
iclientidl
介面來實現,它是外部不可見的
3)tcorbaclientfactory
負責建立
corbaclientimpl
例項,對外遮蔽
corba
的實現細節
4)iexpand
介面沒有在圖中出現,是因為它和
corba
的任何細節都無關
同corba
的適配方式,採用
adaptor
和delegate
模式來實現
說明:1)
iasn
介面定義傳送訊息和接收訊息兩個介面
2)asn.1serverimpl
採用adpator
模式和委託模式來實現,將
iplatform
的介面轉呼叫
platformimpl
來實現的,另外它分析收到的所有
asn.1
的訊息,將訊息內容轉換為
iplatform
的介面呼叫,然後再將
iplatform
介面呼叫的返回值組裝為乙個
asn.1
訊息傳送出去
3)tasn.1serve***ctory
內部負責
asn.1serverimpl
例項的建立,對外遮蔽
asn.1
的任何技術細節
4)iexpand
介面沒有出現,是因為它和
asn.1
的任何細節無關
採用adaptor
模式來實現。
說明:1)
asn.1clientimpl
將iplatform
介面呼叫轉換為
asn.1
訊息傳送出去,然後將收到的
asn.1
響應訊息轉為為標準
c++的資料結果作為
iplatform
介面呼叫的返回值和輸出引數
2)tasn.1clientfactory
對外遮蔽
asn.1
的技術細節
從上面可以看出,對於外部使用者來說,是內部是採用
corba,asn.1
還是純粹的
c++api
介面都沒有任何區別。我們甚至可以同時提供這三種方式,使用者根據需要進行選擇。比如所有業務模組(元件)都是同機執行,我們可以放棄
corba,asn.1
技術,以後要改為分布式組網方式,只需要替換為乙個類工廠庫即可。以後要支援一種新的分布式技術,只需要採用同樣的方式實現乙個適配層即可,上層業務的業務的所有實現都是可以重用的。
最後回到一點:應用軟體的核心是業務不是底層分布式技術。
CSS等分布局方法
css等比例劃分,在css布局中是比較重要的,下面分享幾種常用方法和 一下相容性。emmet html ul.float ul li 5 con h3 p.float ul float ul li該樣式相容性較好,但是無法實現當裡面的列增多時比例也隨著變化,必須手動修改,當然你也可以使用乙個js來調...
H5頁面如何進行等分布局?
眾所周知,flex布局可以使得一行元素等分排布,但是有時候我們的需求並不是每一行的元素都是等分排布,比如應該設定成下面都樣式 1 彈性布局flex此時不再適用,因為彈性布局是會使得每一行都是根據div的個數n進行將每乙個div都均分1 n的寬度。2 使用div布局,且必須設定成行內塊 inlne b...
正確使用記憶體
對於初學者來說,記憶體是個神秘的空間。程式的絕大部分錯誤,也是在於記憶體的使用不當造成的,而且這些錯誤有些都是隱藏很深的。所以,如何掌握記憶體的使用,通曉系統對記憶體的管理手段,將是軟體成功的乙個非常關鍵的因素。首先我們要了解記憶體的分配方式。一般來說,記憶體的分配方式有三種 1 從靜態儲存區域分配...