Java后端开发规约

持续补充中...

原作者@小松

Java后端开发规约补充

命名规范

命名常常被认为是编程中的细节问题,但是其重要性往往被低估。而所谓的优雅代码往往就体现在这些细节当中,一个名字虽然不能影响程序的执行,但是却对代码的表达力和可读性有着重要的影响。在程序员工作中,大部分的时间都是在阅读和理解代码,好的命名能够让代码的概念清晰,增加代码的表达力;词不达意的命名会破幻我们思考的连贯性,分散有限的注意力。

有意义的命名

  1. 变量名

变量名应该是名称,能够正确的描述业务,有表达力。如果一个变量名需要注释来补充说明,很有可能说明命名就有问题。

  1. int day; //表示过去的天数
  1. int pastDays;

观察上面的第一个命名,不看注释的情况下,我们第一直觉就是"天",阅读代码的人为了知道这个‘day’的含义,就得去结合上下推测其含义。类似的还有一些‘魔法字符’,应该尽可能使用常量定义。

  1. 函数名

函数命名要具体,空泛的命名没有意义。例如“processData()”就不是一个好的命名,因为绝大多数的防范都是对数据的处理,这样的命名并没有表面要做什么事情,相比之下 “validateBill()” 类似的具体的命名就要好得多。

  1. 类名

类是面向对象中最关键的概念之一,是一组数据和操作的封装。对于一个系统而言,其实可以大致分为两大类:实体类和辅助类。

实体类承载核心的业务数据和核心的业务逻辑,其命名应该充分体现业务语义,并在团队内部达成共识,例如 Customer、Employee 等等。

辅助类是辅助实体一起完成业务逻辑的,其命名要能够通过后缀来体现功能。例如用来为 customer做控制路由的控制类 CustomerController,提供Customer服务的服务类 CustomerService。

  1. 包名

包代表着一组有关系的类的集合,往往起到分类组合和命名空间的作用。包名应该能够反映一组类在更高层面的抽象,例如有一组类:Apple、Pear、Orange,我们可以考虑将其放入名为 ‘fruit’ 包中。

  1. 模块名

TODO

保持命名的一致性

每个概念或者动作应该对应一个词.例如,get、find、query、fetch 都可以表示查询的意思,理想状况下对一些标准的CURD操作应该统一固定。

*

CRUD操作

方法名约定

新增

create

添加

add

删除

remove

修改

update

查询单个

get

查询列表

list

分页查询

page

统计

cout

使用对仗词汇

使用对仗词的命名规则有助于保持一致性,从而提高代码的可读性。实例如下:

  • add/remove(delete)
  • increment/decrement
  • open/close
  • insert/delete
  • ......

使用后置限定词

日常开发中经常会有表示计算结果的变量,例如总金额、平均值、最大值等等。我们可以使用

Total 、Sum、Average、Max、Min 这样的限定词加到名字最后面,例如:revenueTotal(总收入)。

统一业务语言

为什么要统一业务语言呢?试想一下如果你明天和需求或者业务方讨论的是一种编程语言,而在团队内部交流、设计画图、建模使用的是另外一种语言,这大概率会降低代码的拜倒能力,在业务语言和文档、代码之间出现一条巨大的鸿沟。

统一语言就是要保证团队在内部的交流、模型、代码和文档中都要使用同一种语言。实际上统一语言也是领域驱动设计的最为重要的的概念之一。

编码规范

代码风格规约

  • 写完代码记得ctrl+alt+L对齐代码(统一使用idea默认字符格式)

分支管理规范

分支命名规约

*

前缀

含义

master

主分支,可用的、稳定的、可直接发布的版本

develop

开发主分支,最新的代码分支

feature-**

功能开发分支

bugfix-**

未发布bug修复分支

release-**

预发布分支

hotfix-**

已发布bug修复分支

提交命名规约

除了分支的名称需要规范,提交的命名也同样如此。

格式为:[操作类型]操作对象名称,如[ADD]readme,代表增加了readme描述文件。

常见的操作类型有:(待定:可结合IDEA commit 插件、或者其他工具)

  • [IML] 实现正在开发的功能
  • [UPDATE] 更新或改善已经实现的功能
  • [FIX] 修复BUG
  • [REF] 重构一个功能,对功能重写
  • [ADD] 添加实现新功能
  • [DEL] 删除不需要的文件

版本号规范

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

  1. 主版本号:当你做了不兼容的 API 修改。
  1. 次版本号:当你做了向下兼容的功能性新增。
  1. 修订号:当你做了向下兼容的问题修正。

先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

数据库设计规范

TODO

Redis使用规范

键值设计

  1. Key名设计
  • 可读性与可管理性
  1. -- 业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id
  1. ugc:video:1
  • 简洁性
  1. -- 证语义的前提下,控制key的长度,当key较多时,内存占用也不容忽视,例如:
  1. user:{uid}:friends:messages:{mid} 简化为 u:{uid}:fr:m:{mid}。
  • 不要包含特殊字符

反例:包含空格、换行、单双引号以及其他转义字符

  1. Value值设计

防止BigKey

string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000

反例:一个包含200万个元素的list。

字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞。

命令使用

  1. O(N)命令需要考虑N的数量

...

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值