JAVA初長成

java學習筆記--架構設計(一)

1 一個實際項目Java架構設計之整體設計

2 具體技術架構模塊圖

如上圖示所,框架主要包括了:

l MVC開發框架java

l 工做流技術程序員

l 用戶、權限、角色管理spring

下面分別詳細介紹。sql

MVC方案

視圖層技術方案(view)

在經常使用開發框架的應用中,經常使用於視圖層的有:Jsp ,Jsf,Freemarker,Xslt, Velocity等.JSP:經常使用的一種視圖層,沒法實現嚴格的MVC分離,JSP代碼幾乎等同於Java代碼。表現邏輯與代碼相混雜,代碼重用性,系統維護性比較低。下面分別介紹:數據庫

l JSF:基於組件事件驅動,遵循JAVAEE的標準,上手快,有大量可重用組件。對RESET支持很差,沒有一個統一的實現,既有SUN的實現,又有apache的實現-myfaces,編寫定自定義組件要求高,比較適合作企業應用。apache

l xslt:模板技術之一,有極佳的拓展性和重用性,可實現嚴格的MVC分離。Xslt缺少強有力的編輯器支持。在性能上,相對於JSP,Freemarker,Velocity,在等同複雜頁面度的表現層邏輯,xslt性能比其餘幾個差距比較大,佔用的內存空間也比較多。緩存

l Velocity:經常使用的模板技術之一,可實現嚴格的MVC分離,簡單輕量級,語法簡單。vtl語法須要必定上的學習時間,不支持jsp標籤。安全

l Freemarker:經常使用的模板技術之一,可實現嚴格的MVC分離。與Velocity相比,Freemarker功能更增強大,對錶現邏輯和業務邏輯的劃分更加嚴格,可自定義macro,Freemarker同時支持JSP的標籤。Freemarker對於語法相對比較嚴格,變量必須賦值,map的key必須爲string。服務器

基於以上分析,結合開發效率和運行效率,建議採用Freemarker做爲視圖層的技術。restful

控制層方案(controller)

在經常使用的控制層技術中,有struct1,struct2,springMVC等。

  1. struct1:比較早的一個控制層框架,非線程安全,如今不多使用。
    複製代碼
  2. struct2:較爲成熟並應用很是普遍的框架,即經典的SSH,比較熱門
    複製代碼
  3. springMVC:後起之秀,目前最有前景的技術,如下列出與struct2主要對比項:
    複製代碼

l 在性能上,springMVC優於struct2。

l springMVC隸屬spring團隊的產品,學習過spring的人,上手快。

l springMVC可實現配零配置,struct2須要沒法作到零配置。

l 對於開發效率來說,springMVC相對struct2,效率高。

l springMVC內置restful,無需第三方插件的支持。

l 標杆對照,在淘寶、拍拍等大型電商網站中,也採用springMVC做爲控制層技術,有不少資料可做爲參考。

從技術的先進性、複雜性上考慮建議採用springMVC做爲控制層。

模型層(module)

能夠選用兩大主流的開源ORM組件:hibernate和MyBatis。

l Hibernate學習門檻比較高,限制對象模型,在多表、複雜查詢下,優化難度較高。對於後期的維護或者重構來講,難度較大。

l MyBatis屬於半ORM框架,能夠對sql作到精細控制,可是開發效率來說,比hibernate相對慢些,可是利於後期的維護於重構。

從靈活性、可控性、學習成本和本人熟悉程度考慮,配合使用codeSmith代碼生器能大幅提升開發效率,建議採用MyBatis,做爲項目的ORM框架。

數據庫(database)

可能被採用的數據庫有Oracle、MySQL,使用Mysql的好處有:

l 源免費數據庫,使用較新穩定版本5.5

l 功能強大,穩定;

l 經歷過有普遍的成熟的應用實踐考驗;

l 使用經驗比較豐富,容易上手,使用簡單;

l 視用戶量狀況考慮,前期小規模的時候採用Master-Slave主從模式備份。後期逐步考慮:實現數據庫讀寫分離。並可考慮分表、分庫,還可使用集羣提高讀性能。

使用Oracle的好處有:

l 目前公司已經使用

l 性能好、安全性高,各類方案完整

l 客戶較爲承認

基於目前公司已使用,因此建議仍採用oracle,但若是須要下降成本能夠採用Mysql。

推薦MVC技術方案流程

整體流程圖

控制層(controller)流程圖

用戶、角色、權限管理模塊

CAS +LDAP

工做流方案

能夠選擇的技術主要有:JBPM4,JBPM5,Activiti5

因爲目前還未深刻分析,初步設想可能偏向於Activiti5,由於它更好的與當前架構集成

數據集成ETL工具

Kettle是一款國外開源的ETL工具,純java編寫,能夠在Window、Linux、Unix上運行,數據抽取高效穩定。Kettle 中文名稱叫水壺,該項目的主程序員MATT 但願把各類數據放到一個壺裏,而後以一種指定的格式流出。Kettle採用了LGPL協議,即修改後的程序能夠不公開發布,能夠放心的使用,而不用考慮版權問題。

通用基礎模塊/組件方案

日誌組件

l 採用J2EE平臺最經常使用的Log4J日誌組件

Cache組件

l 前期使用單臺應用服務器的時候能夠直接使用Mybatis內置緩存機制或者是服務器緩存開發;

l 後期根據實際運營狀況,要使用集羣部署方式時,使用Memcached組成分佈式集羣緩存,這樣就不存在緩存同步的問題。

l 經過Spring的AOP結合Memchched將緩存功能嵌入到代碼中,根據實際的業務場景,制定緩存策略。

相關文章
相關標籤/搜索