`

技术选型

阅读更多

1. Web

MVC Framwork: SpringMVC3.0 Restful的风格终于回归了MVC框架的简单本质,对比之下Struts2概念太复杂更新又太懒了。

Template:JSP2.0且尽量使用JSP EL而不是taglib,万一要写taglib也用纯JSP来编写,一向是SpringSide的推荐,Freemarker们始终有点小众, 而Thymeleaf与美工配合度非常高,可惜也是太少用户了。

Layout Decoration: Tiles的配置都太复杂了,SiteMesh2好些,但Sitemesh3烂尾了。

Javascript Library: 随大流用了JQuery。其实Dojo的面向对象语法更优美,但用户数和插件社区差了点。

CSS Framework: 最热火的Twitter Bootstrap,提供了简便的布局能力和基本的页面美化。

JavaScript/CSS Compressor: 还是随便选的YUI Compressor

Validation: JQuery Validation Plugin这种客户端校验的客户体验更好,而Spring MVC集成Hibernate Valiator的服务端校验则可以避免恶意用户跳过页面直接发送请求,校验规则也更多,需要混合使用。

 

2. WebService

SOAP WebService: JAX-WS2.0的注解 + Apache CXF 无疑是最成熟的,一说起Axis1/2我都要打冷颤。

Restful Service: JAX-RS 1.0 + Jersey/CXF,够标准。但直接使用Spring MVC能使架构更简单。 如果追求极致的性能标,直接写Servlet也没啥。

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做代码质量检查,是大部分好项目的共同爱好。

 

 

分享到:
评论

相关推荐

    Java 常用技术选型.docx

    Java技术选型是软件开发中的关键决策,它直接影响项目的稳定性和效率。在Java领域,有众多优秀的框架和技术可供选择,本篇文章将详细讨论一些常用的技术选型及其应用场景。 首先,后端服务框架方面,Dubbo是一款高...

    软件技术选型报告摘要.pdf

    软件技术选型报告摘要.pdf 本报告是软件技术选型报告的摘要,主要内容包括业务和系统的对齐、商务谈判要点、项目第三阶段总体工作计划、ERPERP软件商招标、衡量软件供应商的标准、质量和范围、成本、时间等方面的...

    技术选型方案(开发语言选型)针对java.doc

    在软件开发过程中,技术选型是一项至关重要的决策,它直接影响项目的效率、可维护性和扩展性。本文将深入探讨为何选择Java作为开发语言,并分析其在技术选型中的优势。 Java是一种广泛使用的高级编程语言,由Sun ...

    移动应用开发技术选型策略.pdf

    "移动应用开发技术选型策略" 移动应用开发技术选型策略是企业移动应用开发技术选择的重要组成部分。当前,移动应用的类型和开发模式多样化,企业在选择移动应用和开发技术时面临着很多的挑战。本文对移动应用的分类...

    张辉清-小团队构建大网站之技术选型.pdf

    在构建大型网站的过程中,技术选型对于小团队来说至关重要,因为它直接影响着项目的成功与否和团队的发展潜力。张辉清在《小团队构建大网站之技术选型》中深入探讨了如何进行有效且适应性强的技术选型,以支持团队在...

    技术选型方案(中间件选型)针对Nginx.doc

    **技术选型方案:Nginx 中间件详解** 在当今的互联网环境中,选择合适的中间件对于构建高效、稳定、可扩展的系统至关重要。Nginx作为一款高性能的Web服务器和反向代理服务器,因其出色的性能特性而备受青睐。本文将...

    深度学习技术选型白皮书(2018 年)

    深度学习技术选型白皮书(2018年)是针对当时深度学习领域的一份重要参考资料,旨在为开发者、研究人员以及企业决策者提供全面的深度学习技术对比和选择建议。这份白皮书可能涵盖了以下几个关键知识点: 1. **深度...

    深度学习技术选型白皮书.pdf

    深度学习技术选型白皮书(2018年)由Delphi标签标注,是中国人工智能产业发展联盟的研究成果,于2018年10月发布。白皮书的目的是为企业在应用深度学习技术时提供技术选型参考,并为开源框架及产品的选型评测提供依据...

    技术选型-技术委员会必要的思考-沈剑.pdf

    在沈剑的《技术选型-技术委员会必要的思考》中,他深入探讨了技术委员会的核心职责、职级评审、开源与自研、以及技术落地等方面的问题。 首先,技术委员会的核心职责主要集中在组织人才管理和技术战略两个方面。在...

    企业存储资源池整合及技术选型方案.pptx

    企业存储资源池整合及技术选型方案 本文将对企业存储资源池整合及技术选型方案进行详细的解读和分析,从存储资源池的目标、架构、技术选型、难点及挑战等方面进行详细的探讨。 一、存储资源池的目标 企业存储资源...

    技术选型-DorisDB Vs ClickHouse Vs GreenPlum.pdf

    在进行OLAP(在线分析处理)技术选型时,常常需要对比不同的数据库系统以寻找最适合自己需求的解决方案。本文主要探讨了DorisDB、ClickHouse与GreenPlum三款OLAP数据库,并分析了各自的特点和性能表现。 首先,...

    互联网公司如何正确的做技术选型.pptx

    互联网公司如何正确的做技术选型.pptx

    大数据 OLAP 技术选型.pdf

    大数据 OLAP 技术选型

    05_知其然而知其所以然:如何进行消息队列的技术选型?.zip

    标题中的“05_知其然而知其所以然:如何进行消息队列的技术选型?”表明这是一篇关于深入理解消息队列(Message Queue, MQ)技术选型的文章,旨在帮助读者不仅理解如何使用MQ,还要理解为什么要选择特定的MQ方案。在...

    技术选型方案(数据库选型)针对oracle.doc

    技术选型方案(数据库选型)针对oracle(使用Oracle数据库,有最高认证级别的ISO标准认证,性能极高,保持着开放平台下TPC-D和TPC-C世界记录,有极强的可伸缩性和并行性。)

    云平台技术选型之十:API网关

    云平台技术选型之十:API网关的知识点讲解 API网关(Application Programming Interface Gateway)是微服务架构中用于简化客户端与微服务之间交互的重要组件。在微服务架构中,服务被细分成多个独立部署的服务单元...

    【202007】AIIA发布业界权威AI芯片目录集:AI芯片技术选型目录_97页.pdf

    【202007】AIIA发布业界权威AI芯片目录集:AI芯片技术选型目录_97页.pdf

    10-技术选型.md

    在进行大厂前端项目设计时,技术选型是至关重要的一步。它不仅决定了项目的开发效率、稳定性和维护成本,同时也反映了开发团队的技术能力和对业务需求的理解。技术选型应该基于项目需求、团队技能、社区支持和项目...

    开源技术选型手册--为技术人员提供参考

    本迷你书是《开源技术选型手册》 的精选版,包括Web框架篇、动态语言篇、Ajax开发篇、版本控制篇、项目管理篇(AOP)、面向方面编程篇和面向服务架构篇(SOA)等,作者均为 InfoQ中文站编辑。《开源技术选型手册》由...

Global site tag (gtag.js) - Google Analytics