作者:泥瓦匠

第1周:泥瓦匠Java经验小结_spring


“四时不谢之兰,百节长青之竹,万古不败之石,千秋不变之人” 


Java 泥瓦匠工作技巧小结(第一期)

一、API 包设计

第1周:泥瓦匠Java经验小结_分页_02

SOA 场景,服务 A 会引用服务 B 的 API 包,然后调用服务 B 。前后分离场景,走 RESTful HTTP 服务给前端也是类似。那么 API 包里面一般包括有哪些?

  • 业务接口
  • 业务入参
  • 业务出参
  • 业务错误码
  • 业务枚举常量
  • 等等

业务接口没啥好聊的。聊聊业务入参,入参一般包括:基础类(IP、来源等)、有分页需要分页类、还有重要的业务入参等。 前面两个 基础信息(IP、来源等)、有分页需要分页信息也一般设计成这样,继承关系:

注意,序列化要实现的,序列化的可以看看这个文章 。第二可以加上 @Data 注解,会使用 Lombok 工具来消除冗长的 Java 代码,尤其是 POJO 的 getter / setter 方法。具体查看 Lombok 官网地址:projectlombok.org。

业务入参呢?一般要么继承 BaseParam ,一般要么继承 PageParam 分页查询服务。业务入参,有时候也有个巧的用法,入参字段里面使用接口,然后业务方来选择具体传什么实现类。比如:

出参提供一个 BaseResult,包含返回码,返回信息及请求 IP等。PlainResult 单个结果集,ListResult 列表结果集,MapResult... 常规包括,code、msg、对象等,这里的 code 跟 HTTP 协议的 code 是有点映射,但也有区别。

业务服务内业务错误,不是说 HTTP 协议响应码错误。所以 HTTP 响应是 200 ok,但响应体中告知接受业务方具体业务错误信息。

好比 有个 HTTP 服务 A ,URI 是 /a?name=BYSocket 你想访问 A 服务,访问了 /b ,会告诉你 400 ,这是就是 HTTP 协议响应了 但你访问 /a,没有带 name 过来,响应 200 ,响应体的错误码返回 name 为空,业务错误码 xxxx。这样是对的

对了,还有 base 、page 都可以封装一个 jar ,公用到 common 包,统一。

二、order by rand() limit 1

顾名思义,随机取一条数据。这个性能比较差,具体可以参考优化版本:


三、spring boot 脚手架工程

老是新开一个项目,新开一个项目。。。。 用 spring boot 虽然配置已经少了,也少不了一些各种某一类的业务 java config 配置。常用的可以直接放到脚手架上面,比如 spring boot 的官方地址:

https://start.spring.io/

第1周:泥瓦匠Java经验小结_java_03

那么,spring boot 某个公司某一个大类业务的脚手架工程,可以用 https://github.com/spring-io/initializr/ 开源项目进行修改,进行定制,服务更好的新业务新工程。

看图中右上角的 github 地址就在那。

-The End-


第1周:泥瓦匠Java经验小结_spring_04