蔣彪@南京 2010-8-16
什麼是合適的,那麼什麼就是成功的。
這句話絕對適用於系統架構和設計。
最簡單的例子,如果乙個系統需要的實時反應,而不是複雜的業務。那麼這個系統在設計的時候就應該更加關注與速度而不是業務的分層。
反過來說,如果乙個系統能夠容忍客戶反應的遲鈍,但是要求實現非常複雜,後期可擴充套件的業務邏輯。那麼這個系統就應該有效的對業務進行抽象和分層。
在這裡,我想分享幾個我所知道的有趣的系統架構設計。
首先我們看一下,這個系統的需求概要
系統作用
乙個保險系統
系統執行環境
全國各地的保險分銷點,通過https協議訪問
系統效能要求
要求響應速度高,但是併發量不是很大
系統未來擴充套件預期
系統未來的業務改動不會很大
看到了沒有,這個系統設計的多麼有趣。沒有臭屁的mvc,沒有亂七八糟的xml配置檔案,更沒有資料庫的orm。
非常單純的系統設計,非常簡潔。
所有的業務處理都放在jsp中間,而所有的業務處理都是通過乙個自定義的jsp tag庫。
接著通過這個jsp tag庫訪問資料庫中的pl/sql,pl/sql接著做資料庫的增刪改查。
整個系統中最重的地方就在自定義的jsp tag庫,資料庫的連線,邏輯業務處理都在這裡進行。
後期維護的時候,只要針對新業務擴充套件jsp tag庫就可以了,如果想變換資料庫處理邏輯,就直接改寫pl/sql。
在整個系統的業務不是很龐大的時候,這樣的系統設計是不是更好更實用呢?
另外,可以猜測,這個系統的設計者肯定是以前的銀行系統的設計者,或者可能是以前cobol時代的老程式設計師。因為這種短平快的設計思想絕對是那個時代的經典產物。
雖然已經很古老,但是依舊很實用。
首先我們看一下,這個系統的需求概要
系統作用
乙個行業內通用的**系統,需要根據不同的**公司的業務新增會修改具體的邏輯
系統執行環境
系統效能要求
響應速度和併發量都不大,但是要求資訊傳輸完全正確,不能失真
系統未來擴充套件預期
該系統其實是乙個通用的**系統平台,然後按照具體使用者的要求定製系統模組
我們可以看到,這個系統的框架明顯的複雜了起來。
首先在客戶端,它採用了mco技術,讓框架變成富b/s框架。
其次在,伺服器層,他部分採用了struts技術,但是有一點很特別的。
他在action和logic層次之間加上了乙個facade層次,這個最主要的原因就是減低控制層和邏輯層之間的耦合性,為了後期的擴充套件性做好準備。
簡單的說起來,整個系統的客戶端會有乙個類似於activex的控制項在執行,專門用於解析伺服器端傳送來的nxml訊息。而伺服器端也不是單純的傳送http請求來給客戶端,而是通過框架傳送有特定標識意義的nxml訊息。
整個框架的技術層次如下:
最後提一下,這個框架是如何實現高可重用性的功能,如何滿足不同客戶快速定製化的要求。
那就是,對具體的業務抽象,抽象出高重用性的logic,用來給予下方的具體業務類繼承。具體的抽象logic如下:
機能facade名
logic名
登入templateregistfacade
templateregistlogic 削除
templatedeletefacade
templatedeletelogic
訂正資料
templatecorrectfacade
templatecorrectlogic
出報表templatechohyofacade
templatechohyologic 上傳
templateuploadfacade
templateuploadlogic
templatedownloadfacade
templatedownloadlogic 確認
確認解除
templatecancelfacade
templatecancellogic
詳細登入/更新/削除
templatecorrectallfacade
templatecorrectalllogic
excel處理
templateexcelfacade
templateexcellogic
原文見:
幾個有趣的java問題
問題一 for int i start i start 1 i 這個 有沒有可能死迴圈呢?問題二 while i i 1 這個 有沒有可能死迴圈呢?問題三 system.out.println i i 0 這個 有沒有可能列印false呢?問題四如何讓 i i true 答案是全都有可能 問題一 當...
分享幾個有趣的Linux命令
最近工作比較忙,沒時間寫部落格,這次介紹幾個有趣的linux命令。當你使用這個命令時會看到一輛小火車從你的螢幕經過。親測!安裝命令如下 yum y install sl執行效果如下 翻轉字串,翻轉命令後面帶著的字串。先輸入rev 然後回車就可以輸入向翻轉的字串了,輸入完成後再按回車執行翻轉。執行效果...
JS解構幾個有趣的用途
1 交換變數 通常交換兩個變數的方法都需要乙個額外的臨時變數,如下 let a 1 let b 2 let temp temp a a b b temp console.log a 2 console.log b 1 temp是乙個臨時變數,它先儲存a的值。然後把b值賦給a,然後將temp值賦給b。...