美文网首页架构
搭建一个java项目的脚手架总结

搭建一个java项目的脚手架总结

作者: 低调_0c1d | 来源:发表于2019-07-22 11:15 被阅读0次

搭建一个java项目的脚手架总结

最近一个月在公司经历了两个项目的从零到一的过程,都涉及到了从最初的只有需求,没有代码仓库的情况。一般情况下,迫于时间压力,我们一直都期望在一个比较完善项目上做小的修改,但是,往往天不随人愿,这里我整理一下一个新项目搭建的普遍方法,作为后续的工作之用,从而提高效率。

1.reade.md

编写readme文档,其如要内容需要包括,但不限于如下内容:

  • 项目简介:用一两句话简单描述该项目所实现的业务功能;
  • 技术选型:列出项目的技术栈,包括语言、框架和中间件等;
  • 本地构建:列出本地开发过程中所用到的工具命令;
  • 领域模型:核心的领域概念,比如对于示例电商系统来说有Order、Product等;
  • 测试策略:自动化测试如何分类,哪些必须写测试,哪些没有必要写测试;
  • 技术架构:技术架构图;
  • 部署架构:部署架构图;
  • 外部依赖:项目运行时所依赖的外部集成方,比如订单系统会依赖于会员系统;
  • 环境信息:各个环境的访问方式,数据库连接等;
  • 编码实践:统一的编码实践,比如异常处理原则、分页封装等;
  • FAQ:开发过程中常见问题的解答。

注意:readme文档,一定要持续更新,否则,会造成文档和代码的不一致

2.便携的脚本
尽可能多的提供自动化脚本,能够也能降低新人的上手难度和恐惧感,使其更加自信

  • 打开idea
  • 本地运行
  • 本地构建

3.代码分布
经过查看网上的相关资料,关于代码结构,我在考虑是否可以可以放弃按照controller,service,dao,entity的分包方式,而采用按照业务分包的方式(如business1,business2)。

  • 1.前者是按照技术的方式分包,后者是按照业务的方式分包
  • 2.前者会导致业务代码比较分散,后者能保证同业务内的代码尽可能的聚合
  • 3.在代码的日常维护修改中,前者的修改往往也会比较分散,而后者往往能够聚合在一起
  • 4.当项目需要进行拆分的时候,前者的耦合会比较紧密,拆分可能会比较困难,而后者可能会比较容易

4.自动化测试
4.1 自动化测试的分类

  • 单元测试(src/test/java):核心的领域模型,包括领域对象(比如Order类),Factory类,领域服务类等;
  • 组件测试(src/componentTest/java):不适合写单元测试但是又必须测试的类,比如Repository类,在有些项目中,这种类型测试也被称为集成测试;
  • API测试(src/apiTest/java):模拟客户端测试各个API接口,需要启动程序。

5.日志处理
关于日志记录重点需要考虑两个问题:

  • 链路追踪,比如MDC(Mapped Diagnostic Context)
  • 多节点下,日志集中记录,使用elk达到es中

6.异常处理
异常处理需要考虑的问题:

  • 格式统一
  • 上下文和结构化信息
  • 异常的唯一标识

7.定时任务
定时任务主要考虑的问题是分布式锁,可以使用的技术包括Shedlock、Redis、ZooKeeper和Hazelcast等的分布式锁实现机制

8.编码风格
google、alibaba、唯品会

9.静态代码检查

  • Checkstyle:用于检查代码格式,规范编码风格
  • Spotbugs:Findbugs的继承者(用过)
  • Dependency check:OWASP提供的Java类库安全性检查
  • Sonar:用于代码持续改进的跟踪(用过)
  1. 健康检查
    健康检查的主要作用:
  • 初步检查程序是否运行正常
  • 负载均衡软件会通过一个健康检查URL判断节点的可达性

11.接口文档
swagger

12.数据库迁移
flyway

13.多环境(profile)

  • local:用于开发者本地开发
  • ci:用于持续集成
  • dev:用于前端开发联调
  • qa:用于测试人员
  • uat:类生产环境,用于功能验收(有时也称为staging环境)
  • prod:正式的生产环境

14.跨域处理(CORS)
前后端应用分别部署在两个不同的域名下是,需要进行跨域处理

  1. 常用的第三方库
  • Guava:来自Google的常用类库
  • Apache Commons:来自Apache的常用类库
  • Mockito:主要用于单元测试的mock
  • DBUnit:测试中管理数据库测试数据
  • Rest Assured:用于Rest API测试
  • Jackson 2:Json数据的序列化和反序列化
  • jjwt:Jwt token认证(暂时未使用过)
  • Lombok:自动生成常见Java代码,比如equals()方法,getter和setter等;
  • Feign:声明式Rest客户端
  • Tika:用于准确检测文件类型(暂时未使用过)
  • itext:生成Pdf文件等(暂时未使用过)
  • zxing:生成二维码
  • Xstream:比Jaxb更轻量级的XML处理库(暂时未使用过)

相关文章

网友评论

    本文标题:搭建一个java项目的脚手架总结

    本文链接:https://www.haomeiwen.com/subject/vtyilctx.html