前言:
由於院內臨床業務需要高頻強功能的使用者介面互操作性要求,使得在hit行業中存在大量的c/s型軟體,儘管b/s軟體應用範圍正在擴大,但在很多場景中,c/s軟體仍然頑強的生存和發展著。
不過隨著行業軟體開發技術水平的提公升,傳統的c/s的軟體,也就是客戶端程式直接連線資料庫的模式越來越顯得過時和不符合需求了。此時需要對這些c/s軟體進行公升級。這些c/s軟體是各種開發組織(軟體公司和醫院資訊科)花費數萬人月完成的,是不可能一下子替換的,只能漸進的公升級。
c/s+web service混合模式:
目前比較常見的模式就是c/s+webservice的混合模式。
c/s+b/s混合模式就是建立乙個web伺服器,開放大量的web service介面,然後讓c/s客戶端軟體呼叫。web伺服器直連資料庫,而c/s客戶端程式不再直接連線資料庫。這樣的好處主要有:
1.客戶端仍然保留c/s軟體具有的高頻強效能的使用者介面互操作性的要求。
2.客戶端不用直連資料庫,避免客戶端的資料庫配置操作,降低實施工作量。
3.只有web伺服器直連資料庫,降低系統中資料庫連線數量,減輕資料庫伺服器的負荷。
4.一些業務功能的更新只需要更新web伺服器程式,web service介面保持不變,降低更新客戶端程式檔案的概率,這有利於運維。
不過這種混合模式加大了開發工作量,主要有
1.web伺服器需要頻繁的定義和修改web service。使得客戶端程式需要頻繁的更新web引用,需要兩頭修改**。導致客戶端軟體的重新編譯和部署。
2.除錯不方便,在除錯客戶端程式時斷點進入到web伺服器程式中比較麻煩。單步除錯不能一通到低,本來使用方便的「編輯並繼續」等除錯手段無法使用。
在現代軟體專案中,軟體開發和除錯工作量(包括公司內部開發和駐場開發)佔據了整個工作量的很大的一部分。很多專案的失敗是源自軟體開發不力。因此降低開發工作量和工作時間有利於保障專案按時完成,讓開發組織的利益最大化。
「斷骨增高」模式:
為了比較穩妥的公升級c/s軟體為混合模式,並能方便的開發和除錯,在此筆者提出了對傳統c/s軟體進行「斷骨增高」的手段進行公升級。
「斷骨增高」原本是一種醫學手術。是根據肢體組織在一定應力刺激下再生的生物學原理,應用骨科截骨術,在小腿或大腿把已經閉合的骨生長線重新「開啟」,並在體外安裝一種具有牽伸作用的肢體延長器,根據每個人組織再生能力和特點,每天以0.5公釐至1公釐的速度將肢體緩慢地延長。
而筆者將利用一種透明**的軟體技術,對傳統的c/s軟體進行模組整理、內部分層,然後軟體模組**,但仍然保持軟體模組之間的呼叫關係,將傳統的c/s軟體改造成b/s,c/s混合模式的軟體。讓傳統軟體重新煥發活力,延長系統壽命。其原理如下:
首先傳統的c/s程式結構如下:
這種結構下,ui模組、業務邏輯模組、資料庫處理模組相互糾纏,到處都有直接訪問資料庫的**,混亂不堪。
為此,我們需要首先改造,整改之後的程式結構如下:
這種結構下,ui模組、業務邏輯模組、資料庫處理模組之間分離比較清晰,只有資料庫處理模組才能直接連線資料,其他模組盡量少的連線資料庫。
不過考慮到實際情況,不能要求太高,但底線是ui模組必須分離開來,業務邏輯模組和資料庫處理模組不能低成本的分離開來那也能湊合著繼續,但是ui模組絕對不能直接連線資料庫。ui模組不能清晰分離出來,後續操作也就無法執行了。
對c/s軟體的內部功能模組分層後,這時候我們就用到一種叫透明**的機制。在.net開發中就是呼叫型別system.runtime.remoting.proxies.realproxy中的功能。原理圖如下:
其工作步驟如下:
1.透明**客戶端針對業務邏輯模組或資料庫處理模組這些底層功能模組建立透明**物件,並將透明**物件替換掉真正的底層功能模組推送到ui等上層模組前面。
2.上層模組是無法區別透明**和真實的功能模組,因為兩者具有相同的函式簽名,並能進行型別強制轉換。
3.當上層模組呼叫透明**的成員函式時,透明**客戶端會立刻截斷函式的呼叫,將函式名和引數值二進位制序列化成乙個資料報,然後通過http協議發往web伺服器的透明**伺服器端模組。
4.web伺服器接受資料報,進行二進位制反序列化,獲得其中的模組名、函式名和引數值。然後建立相應的功能模組並呼叫其函式。在asp.net開發中就是呼叫system.runtime.remoting.remotingservices型別的executemessage()方法。
5.在web伺服器端內部真實的功能模組執行後得到的結果返回給透明**伺服器端,然後被二進位制序列化生成乙個資料報,然後作為http響應傳送給透明**客戶端。
6.透明**客戶端接受到的資料報並進行解析,生成返回值,然後返回給上層功能模組。上層功能模組就能歡天喜地的拿到資料進行後續處理了。
在這種模式下,為了部署和維護方便,我們可以讓客戶端和伺服器端使用一樣的程式檔案。客戶端雖然載入了底層功能模組,但這些模組是廢棄不用的;而伺服器端載入了ui層等上層模組,也是廢棄不用的。不過這些都不影響整個系統的使用。通過這種模式,我們實現了傳統c/s軟體的斷骨增高。實現了一種分布式運算,大大提高c/s軟體的靈活度和伸縮性。
而且這種模式下,更改底層功能模組只需要改一處,不需要兩邊同時更改,降低工作量。
另外這個過程統一了資料傳輸通道,可以很方便的加上自定義的資料驗證、壓縮和加密。而實現自定義的web service傳輸過程比較複雜。
更進一步的,經過靈活配置,可以讓c/s軟體同時支援透明**遠端呼叫和真實的本地呼叫。以下是客戶端不採用透明**而使用本地真實功能模組的情況。此時web伺服器是停用的。而且客戶端是直連資料庫。
這種模式是非常適合軟體開發和除錯過程的。可以單步除錯一通到底,「編輯並繼續」也能隨時執行。
這樣我們的軟體具有開發模式和執行模式。開發模式非常適合程式設計師的軟體開發和除錯過程;執行模式適合生產環境下的執行,具有強大的伸縮性和可維護性。兩頭都方便,按需配置,有利於快速開發和部署。
推廣:
這種技術方案的推廣也會對整個hit行業帶來巨大的利益。業界已經執行著大量的c/s軟體,它們是各種開發組織投入數萬人月編寫數千萬行的**,並和使用者一起歷經數年時間反覆磨合而得到的。這些軟體凝聚了客戶大量的投資,不能隨便拋棄。
而我們可以採用「斷骨增高」來改良這些c/s軟體,在無需重大修改的情況下顯著增加軟體的可伸縮性和可維護性,重用歷史**,大幅延長軟體的執行壽命,保護客戶投資,創造巨大的經濟效益。
我們都昌公司專門進行底層技術研究和輸出,研製出「斷骨增高」這種非常接地氣的技術方案,然後反覆重構優化和產品化,並制定一套開發指南,然後融入到「都昌賦能框架」中,可以針對所有基於.net平台的c/s程式進行優化,幫助開發組織利用已有技術力量開發出高度可伸縮性和可維護性的軟體,增強解決問題的能力,提高市場競爭力。
C S軟體的自動公升級部署
公升級的原理有好幾個,首先無非是將現有版本與最新版本作比較,發現最新的則提示使用者是否公升級。當然也有人用其它屬性比較的,例如 檔案大小,或者更新日期。而實現的方法呢?在.net時代,我們就有了更多的選擇,可以使用webrequest,也可以使用web service。在這裡我們將用web serv...
軟體即服務與傳統軟體的區別
saas software as a service 的意思是軟體即服務,saas是基於網際網路提供軟體服務的軟體應用模式。saas平台 商將 應用軟體 統一部署在自己的伺服器上,客戶可以根據工作實際 需求,通過網際網路向廠商 定購所需的應用軟體服務,按定購的服務多少和時間長短向廠商支付費用,並通過...
傳統軟體模式是需要變通的
原文連線 傳統軟體模式的四大死穴 asp,應用服務 商,可以簡單理解為讓使用者不要購買應用軟體,而是上網到 asp們的 上去使用自己需要的功能,用的時候花錢,不用不花錢。asp能提供的服務很多,實際上,我甚至認為可以包括一切,所有現有的應用軟體,都可以採用 asp 的模式。現在開始做的比較多的,包括...