springside4

https://github.com/springside/springside4/wiki/Designjavascript

1. Web

MVC Framwork: SpringMVC3.0 Restful的風格終於迴歸了MVC框架的簡單本質,對比之下Struts2概念太複雜更新又太懶了。html

Template:JSP2.0且儘可能使用JSP EL而不是taglib,萬一要寫taglib也用純JSP來編寫,一貫是SpringSide的推薦,Freemarker們始終有點小衆, 而Thymeleaf與美工配合度很是高,惋惜也是太少用戶了。java

Layout Decoration: Tiles的配置都太複雜了,SiteMesh2好些,但Sitemesh3爛尾了。jquery

Javascript Library: 隨大流用了JQuery。其實Dojo的面向對象語法更優美,但用戶數和插件社區差了點。git

CSS Framework: 最熱火的Twitter Bootstrap,提供了簡便的佈局能力和基本的頁面美化。github

JavaScript/CSS Compressor: 仍是隨便選的YUI Compressorweb

Validation: JQuery Validation Plugin這種客戶端校驗的客戶體驗更好,而Spring MVC集成Hibernate Valiator的服務端校驗則能夠避免惡意用戶跳過頁面直接發送請求,校驗規則也更多,須要混合使用。redis

2. WebService

SOAP WebService: JAX-WS2.0的註解 + Apache CXF 無疑是最成熟的,一提及Axis1/2我都要打冷顫。spring

Restful Service: JAX-RS 1.0 + Jersey/CXF,夠標準。但直接使用Spring MVC能使架構更簡單。 若是追求極致的性能標,直接寫Servlet也沒啥。sql

Restful Client: 剛出來的JAX-RS 2.0標準,實際是用Jersey的client api作藍本的, 而直接使用Spring的RestTemplate能夠減小第三方包的引入。

爲了隔絕變化影響,隱藏細節,對外暴露的DTO和應用內部的領域對象是不一樣的類型,用Dozer進行復制。

請求參數的校驗,JSR303 Bean Validator的實現Hibernate Validator沒太多的競爭對手。

3. Database

數據庫設計基本原則: 見DataBase的相關章節

ORM Framework: 快速開發的應用裏,領域對象確定是用JPA標註的。至於API用Hibernate仍是JPA,由於那個極簡便的,DAO只要寫接口就行了的Spring-Data-JPA,因此選了JPA。 固然,JPA的實現仍是用Hibernate

追求高性能的應用,如各類Web服務,固然就是MyBatis了。若是項目再簡單點,Spring JDBC其實也不錯。

傳統數據庫: 無非Oracle與MySQL的選擇,若是你恨MySQL依然是Oracle家的東西,能夠考慮愈來愈多人用的,語法和Oracle很像的Postgresql。

NOSQL數據庫: 國內用的比較多的仍是Redis和MongoDB。Redis更像一個數據結構服務器,暴露各類數據結構的專有API。而MongoDB將數據存成BSON格式,也提供相似SQL的查詢語句,更像一個schema-less的數據庫。

數據庫鏈接池: Apache DBCP原本一統江湖,如今被人批評又慢又複雜,因此有了Tomcat JDBC,另外溫少的Druid也是一個選擇。

Cache: 在JVM裏的緩存,最老牌最多人用的依然是Ehcache,一些更強大的DataGrid方案如HazelCast,JBoss的Infinispan反而沒什麼人用。另外最簡單的JVM內緩存是Guava的Cache

而中央式的緩存,Memcached已經成爲了事實標準。並且當主創撒手無論後,社區如今反而有着穩定的更新。 Client方面,比較穩健選擇的仍是Spymemcached

3. Services

Security Framework: 選擇Apache Shiro是由於SpringSecurity的代碼複雜度已經超過了它的實際須要,擴展困難痛苦。另外一個緣由是SpringSecurity的基本API竟然只支持基於角色的判斷,e.g. hasRole("Administrator"),而Shiro同時還支持咱們其實更經常使用的基於Permission的判斷,e.g. hasPermission("User:Edit")。

JMS ActiveMQ是最多人選用的應用服務器無關的JMS實現,JBoss的HornetQ一樣只是JBoss的用戶在使用。Spring自帶的JMS封裝很好用。但還有更高級的如支持跨平臺的AMQP協議的RabbmitMQ。

Schedule: 對於固定時間間隔的任務,JDK自帶的Executor已足夠好。Cron式定時執行,Spring的Scheduler也能知足。並且Spring的提供的純XML配置也讓Scheduler變得很簡單,Quartz更大的優點體如今保證集羣中有且僅有一臺服務器執行任務。另外,SpringSide還演示了基於Redis作了一個適合海量的只需單次觸發的任務。

JMX: Jolokia能將JMX中的MBean以Restful+JSON的方式暴露出來,使JMX這個古老的,在平臺互通中顯得有點封閉的協議從新煥發了青春。而Spring-Jmx將普通POJO註釋一下就變成MBean也很是方便。

其餘Production Feature: 用Hystrix對訪問資源進行併發、延時、短路控制,防止系統雪崩。而監控方便包括本身寫的Metrics ReporterGraphite

4. Utilizes

General Apache Commons Lang說是伴着咱們長大的也不爲過,3.0版連package名也改了,全面支持泛型。 Guava 是Google新鮮推出的優雅產品。但說它會一桶天下又不定,由於它有時候太新潮了,反而用不慣。好比StringUtils我仍是喜歡用Apache的,IO也一樣是Apache Commons IO的好使。

XML: 用JDK自帶的JAXB就算了,不折騰。

JSON: GSon雖然系出名門並且接口優雅,但Jackson的功能更加豐富到匪夷所思,並且比GSon快不少。

Email: Spring自帶的Email封裝挺好用的。

Logging: Slf4j做爲入口,早就替代了Apache Common Logging了,下面的實現Log4j 1.x 被批判太多同步方法太慢,Log4j做者的後做Logback就好不少了,但社區彷佛不甘心log在一家QOS公司手裏,又在推進log4j2.0的發展,目前仍是beta版。另外選擇Logstash作日誌的中央式處理。

最後,Freemarker雖然不用來作頁面Template,平時用來生成點東西也不錯的。 JodaTime這種要直接加入JDK的就很少說它了。HttpClient建議用Apache HttpClient好過JDK自帶。

5. Test

Unit Test JUnit始終是正統,TestNG的功能如測試用例分組它也慢慢支持了。AssertJ 是目前最好的Assert語句庫。

Mock Mockito的API比老牌的EasyMock更爲優雅,而PowerMock則能配合Mockito完成static方法,函數內部new 出來的對象這些Mockito作不了的mock。

Functional TestSelenium與WebDriver的合併後,最大改進是原來基於javascript的方案, 變成了直接調用瀏覽器的核心API,性能好了。

Performance/Stability Test: [Jmeter]做爲測試工具是最成熟的,Gatling還須要時間成熟。

6. Development Environment

JDK6這樣沒什麼兼容性問題又成熟得一塌糊塗的版本建議你們都升級吧。JDK7也不錯,有G1垃圾收集器和Try-Catch新語法的語法糖。

Jetty7是由於它的嵌入式版本作得好,集成測試不用部署直接就開跑了。開發時通常也不用Eclipse插件,直接本身在代碼裏啓動了,省下打包拷貝War文件的時間。Tomcat如今也有嵌入式版本了,而Jetty最新版要JDK7。

H2 Database,既是嵌入式的,又能夠持久化到文件用Web Console查看,性能仍是嵌入式中最好的。

Maven,在項目構建腳本不復雜的時候的首選,不然就只能ant+ivy了,或者像hibernate和spring同樣,用gradle.

另外,用Log4jdbc在開發時查看實際執行的SQL。

最後,用Jenkins作持續集成, Sonar作代碼質量檢查,是大部分好項目的共同愛好。

7. 參考資料

相關文章
相關標籤/搜索