假如有這樣一種需求:面向固定客戶的網上購物系統,你會怎樣設計這樣的系統呢?
很顯然,B/S結構已經不適用了。只要是通過瀏覽器訪問的網頁,只要知道URL,任何人都可以訪問,就沒有固定客戶的限制了。
那麼,C/S結構呢?C/S結構確實很適合區域網路,但是,不要忘了,我們的客戶可能會走遍地球的各個角落。(當然,不能串連Internet的地方我們不予考慮)
那我們考慮這樣的結構:Winform(.Net)+WebService(Java)。
WebService的協議.Net和Java都是支援的,但是有一個問題:這兩者之間可以傳遞基本類型,但是不能傳遞參考型別。
沒有關係,只要可以傳遞字串,那就代表一切都可以傳遞,最終的解決方案如下:
用戶端發送請求的時候,先把對象序列化為XML檔案,將內容發送到伺服器端,然後伺服器端將XML檔案還原序列化為一個對象。伺服器端返回相應的過程也是如此。
到了這裡,最大障礙都已經解決了,先畫出大概的流程圖:
1)可以看出來,用戶端和伺服器互動利用的是XML,對象和XML相互轉換利用的是一個開源的組件,可以參考http://java-cs-bridge.sourceforge.net/。
2)伺服器端發布WebService利用的是Axis,但是我們對其進行了封裝,所有的用戶端請求都只會調用一個Service,傳遞到這個Service的資料包括它的對象以及具體需要執行的Service。
3)伺服器端的設計模仿了Struts,每個Service Action都只調用Logic,由Logic執行商務邏輯。
4)資料庫訪問我們封裝了dbutils,雖然不是ORM,但是卻可以有很靈活的SQL語句。
5)還有,整個系統運行過程中只有查詢,只是在使用者最後進行完成或者提交操作的時候,統一對資料庫進行更新操作,這樣做保持了資料的統一性,但同時也帶來了一些隱患:如果運行到最後,網路斷了的話,之前的操作都會沒有被儲存到資料庫中。
這個設計無論是伺服器,還是資料庫,都是分布式、可插拔的,非常靈活。
我所能想到的也就這樣子了,各位有什麼建議,或者還有什麼可以改進的,也希望不吝賜教。