有的公司有積累,可能在此上面花費的時間比較少,有的沒積累,可能爲了選擇什麼樣的框架,爲了優缺點爭論不休,耽誤個把月時間都有可能。前端
我但願在此給出一個GPS平臺的標準模版,供你們參考,統一思想,快速進入狀態。mysql
平臺天然是基於傳統的MVC模式的思想來開發,自不待言,而MVC框架,我選擇專一於控制層的Struts2,框架,專一於容器管理,面向接口和服務開發的Spring框架,專一於持久層的Hibernate、iBatis框架。專一於通訊層開發的Mina框架。spring
採用框架,我首先想到的一點,就是約束和統一,在團隊開發中,最忌諱的就是不統一,團隊中咱們總有些開發技術稍微落後,思想跟不上的成員,靠溝通是沒有用的,而是要小孩子的學步車同樣,強行把他框在一個範圍內作開發,讓他跟上整體的開發水平和節奏。不懂得MVC什麼意思,也勉強能作出MVC的東西。因此如今的所謂的架構師,不少都是對這些東東玩的轉,玩的多了就慢慢有了架構的思想,就想玩遊戲,玩多了,就對遊戲體驗關卡設計有了感受,再深刻了解後,就開始有了格局,開始注重設計了.sql
1) Hibernate框架數據庫
這個只要是作Java開發的,基本都在用,除了基本的ORM映射功能以外,我選用它,主要是很方便的自動建立表,在更新實體類的屬性後,自動更新庫表字段,以及能夠方便移植到不一樣的數據庫中,使用Hibernate框架,維護多個關係數據庫。只須要維護不一樣的數據庫配置的xml文件,而不是維護多個代碼版本。mybatis
若是使用PowerDesigner工具結合起來,從建模到代碼自動生成到逆向更新模型,簡直是後臺開發人員的最愛。架構
2) Ibatis框架框架
這個是將開發人員從寫SQL,根據查詢條件,動態生成SQL的地獄中,拯救出來。工具
不少平臺代碼量貌似很大,其實都是唬人的,由於重複的寫代碼,代碼行數能不大嗎。好比GPS平臺中,幾十個、上百個報表,每一個報表都有四五個動態組合查詢條件,你若是本身在代碼中拼SQL,代碼量很壯觀,可是很低級,工做很低級,很容易出錯,錯了也很難跟蹤。也不容易移植。若是要SQL分散在不一樣的代碼文件中,從mysql一直到Oracle,多是又是一個髒活。性能
我對Ibatis進行了改造,自動加上分頁代碼,開發人員就不用管分頁,由Ibatis獲得SQL後,自動根據不一樣的數據,加上不一樣的分頁機制。
如mysql分頁,就是在select 語句後面加上limit , SQLserver的分頁,則是根據rowNum分頁,等等。
3)struts的規劃和應用
struts是面向前端請求的處理框架,咱們首先要概括前端的功能請求,並分類,以此做爲規劃struts的依據。
首先GPS的請求,主要有:登陸,實時數據,報警,報表,基礎信息增刪改,報表分頁查詢,地圖持久化操做請求,終端指令下發,
在設計Action的時候,儘可能以單元造成進行規劃,對XML文件按功能模塊劃分。對URL命名造成標準規範。
4)quartz定時器框架
不少GPS平臺,大量使用了存儲過程了,我見過有家公司維護100多個存儲過程,太壯觀了,我都不知道若是寫存儲過程的人走了,接手的人是否是要哭了。連分頁也要用存儲過程,估計負責的人很擅長存儲過程。但他只顧本身爽了,即便不考慮移植,也得考慮維護、調試、SVN庫提交、單元測試等等。
其實代碼中,能夠作到零存儲過程,對於報表統計類的,能夠徹底採用定時統計的方式進行。如上線率,能夠半小時統計一次,也能夠一個小時統計一次,徹底不用寫存儲過程,經過漫長的計算,對大量的數據進行聚合運算,得出一個結果來。
定時統計是一種規劃收到,經過對將來數據增加量的估計,來設計現階段的數據生成行爲,經過規劃來避免對數據庫大開大合的查詢。當車輛數和數據量達到必定層級的時候,就顯示出定時統計的威力了。好比報警次數統計,若是容許用戶統計任意時間端的報警次數,雖然很靈活,也知足用戶需求,可是一個大型GPS平臺,每個月要產生出巨量的垃圾報警。一個報警統計的SQL查詢或存儲過程查詢就把數據庫的CPU推向高潮。
5) Spring框架
做爲JAVA開發的人,就不用說了,是一個容器,一個粘合劑,將各個層的功能,經過配置和依賴注入,達到粘合的做用。
做爲GPS平臺,咱們推崇的是面向服務開發,因此不可避免的要使用RMI,而Spring很容易將一個Service類,轉換成一個遠程RMI調用接口,開通接口服務。
有了Spring框架,咱們就能夠專心致志的規劃咱們的服務了,而不用關心是遠程調用仍是本地調用的底層機制了。
同時Spring的面向接口開發,自然不自覺的是咱們的程序具有了初級的可擴展性。
如地圖API服務,咱們可能用Java經過http請求後臺調用百度地圖的API來逆向地理解析,也能夠用高德或谷歌的,那咱們就規劃一個LocationService, 定義這個服務提供加偏、地址轉換等功能。至於服務是如何實現的,調用者不用關心。
固然了在Spring中,也很是享受工廠模式的靈活運用,經過在配置文件中配置。咱們能夠根據調用參數不一樣,生產出不一樣的接口類,如一個終端數據包上來,多是部標808協議,也多是DB44,也可能廠商自定義協議,咱們能夠根據spring的配置,調用不一樣的解析插件來進行解析。讓整個代碼結構都顯得簡潔有氣質。