1.概述

          ?? 技術框架選型以工業化大規模軟件開發為原則---主流的選型、適宜團隊分工的架構,同時照顧輕量級快速開發的需求,Java版的約定大于配置的風格。

          2.主要庫棧

          • JDK:JDK 6.0、 UTF-8.
          • IOC container:Spring 3.
          • ORM:Hibernate 3.3.
          • Web :Struts 2.1、JSP 2.0、JQuery 1.4/Dojo Base 1.4.
          • Web Service:基于Apache CXF 2.2的JAX-WS/JAXB 2.0規范, 基于Jersey的JAX-RS規范.
          • Security: Spring Security 3.0.

          3.層次說明

          3.1 entity - 領域模型層

          ??? 使用Sql First的開發模式,先設計數據庫,參考DBA的性能意見而不要太片面追求OO化的表結構。

          ??? 然后純手工編寫entity與極少量的JPA annotation(約定大于配置), 也可以用hibernate-tools從數據庫逆向生成后再作修改。

          3.2 access - 資源訪問層

          ??? 資源訪問層包括對數據庫、JMS、外部的WebService等的訪問。

          ??? 每個領域對象對應一個DAO類,繼承于通用的HibernateDao<T>,所有以該對象為查詢主體的HQL語句統一定義于DAO內并提供查詢函數.

          ? ? 在性能緊要而Hibernate又無法滿足要求時,可混合使用JDBCTemplate。

          3.3 service - 業務邏輯層

          ? ? Service層有兩類對象,

          ??? 一類是領域對象管理類(Entity Manager), 按領域對象劃分,每個Manager類負責管理多個緊密關聯的Entity的增刪改查及其業務邏輯。

          ??? 一類是業務服務類(Service),按業務腳本劃分,可能會訪問到多種領域對象與Manager類。

          ??? 用Spring的Transcation annotation定義事務。 對于Hibernate Lazy load的關聯對象,在性能要求不高時可使用OpenSessionInView Filter,否則在Service層完成對象的初始化操作。

          3.4 web - Web MVC層

          ??? MVC框架使用Struts 2.1 這一老牌傳統MVC框架 + Convention Plugin 實現零配置文件,每個Action實現一組頁面操作。

          ??? View模板用JSP2.0 , 盡量使用純html+JSP2.0 EL展示頁面。

          ??? Javascript與Ajax使用JQuery或Dojo Base。

          ??? 盡量采用CSS框架規范CSS的布局。

          3.5 ws - WebService接口

          ??? 使用Java first的開發模式,通過JSR181 annotation標注Web Service接口,用JAXB-2.0 annotation標注Java-XML Mapping。

          ??? 用DTO類實現Entity與外系統的解耦,用WSResult包裹返回結果與返回碼,不使用Exception返回錯誤。

          ? ? 對于Restful服務,同樣采用JAX-RS annotation標注。

          3.6 security - 安全控制

          ???? 使用Spring Security的Filter 攔截URL,使用Spirng Security的taglib 攔截頁面內容。

          ? ?? 采用 用戶-角色-資源 三層控制,角色-資源關系定義于XML的簡化模式。

          3.7 測試

          ?? 單元測試盡量采用MockObject的方式屏幕所有依賴對象/數據的訪問,對于dao層與特別查詢與特別數據庫操作,采用集成測試連接實際數據庫,基于Spring的集成測試Context。

          ?? 功能測試使用selenium測試主要用戶故事的主流程及Javascript的效果, 使用Jetty嵌入式Web服務器與H2嵌入式數據庫,使用DBUnit預備數據,使得整個測試可以快速運行,對測試環境沒有太多的依賴。

          4.常見問題

          4.1 什么時候使用基于接口編程 ?

          ? ? ? 基于接口編程、Fascade層等等抽象封裝都是有開發和維護的代價的,是否使用歸根結底還是看在團隊人員的分工情況,在大家不得不依賴這幾項技術來解決相互的接口、契約問題時,自然就用了。

          4.2 Package是先分層還是先分模塊

          ? ?? org.springside.模塊A.web 還是 org.springside.web.模塊A? 同上,還是看團隊人員的分工情況。如果是每人從頭到尾負責一個獨立模塊的可以先分模塊。反之,按層進行分工并鼓勵層內重用的,可以考慮先分層。

          posted on 2010-12-17 15:53 hello 閱讀(258) 評論(0)  編輯  收藏 所屬分類: springside
          主站蜘蛛池模板: 大石桥市| 柯坪县| 鹤峰县| 青龙| 西乡县| 汶上县| 尉犁县| 吉林省| 永春县| 中山市| 澄城县| 新平| 博兴县| 那坡县| 南陵县| 南安市| 阿拉善右旗| 墨江| 尉犁县| 石首市| 驻马店市| 遂溪县| 桂平市| 九江市| 彭阳县| 松滋市| 葫芦岛市| 定安县| 铅山县| 泰兴市| 惠水县| 绍兴市| 泽库县| 汾阳市| 华池县| 农安县| 南汇区| 衡阳县| 措勤县| 微博| 博野县|