前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第1周:泥瓦匠Java经验小结

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

作者头像
二哥聊运营工具
发布2021-12-17 10:43:45
1910
发布2021-12-17 10:43:45
举报
文章被收录于专栏:程序员泥瓦匠

作者:泥瓦匠

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

一、API 包设计

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

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

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

代码语言:javascript
复制
public class BaseParam implements Serializable {
 
 private String machineName;
 
 ...
 
}
 


 
public class PageParam extends BaseParam {
 
 private String pageNum;
 
 ...
 
}
 

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

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

代码语言:javascript
复制
public class AParam extends BaseParam {
 
 private AValue value;
 
 ...
 
}
 


 
public interface AValue {
 
 String toString();
 
}
 


 
public class AValueRange implements AValue, Serializable { 
 
 private Long gte;
 
 private Long lte;
 
}
 


 
public class AValueString implements AValue, Serializable { 
 
 private String vale;
 
}
 

出参提供一个 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

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

https://blog.csdn.net/leaway211/article/details/40948

三、spring boot 脚手架工程

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

https://start.spring.io/

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员泥瓦匠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java 泥瓦匠工作技巧小结(第一期)
    • 一、API 包设计
      • 二、order by rand() limit 1
        • 三、spring boot 脚手架工程
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档