Protobuf最佳实践(2)-- 命名规则

上篇文章介绍了一种比较合理的目录结构,本文来讨论一下各种命名规则。

文件

Protobuf文件使用SnakeCase规则命名(小写字母+下划线),以.proto为后缀。比如:player_info.proto。protoc会根据目标语言的命名规则来生成相应的目标文件。如果目标语言是Java的话,会生成PlayerInfo.java。如果目标语言是C++的话,会生成player_info.pb.h和player_info.pb.cc。

消息

消息的命名规则和Java的类名规则一致:首字母大写的CamelCase。比如:

message PlayerInfo {
    ...
}

字段

字段名使用SnakeCase(小写字母+下划线),比如:player_name。和文件名一样,protoc会根据目标语言的风格来调整字段名。对于Java代码,protoc会把SnakeCase转成首字母小写的CamelCase。对于C++代码则会保留SnakeCase风格。

repeated字段

repeated字段,大致等同于Java里的数组或集合。在Java里,数组或集合类型的字段一般命名成复数形式。比如:List<Item> items。但是在定义Protobuf消息的时候,一定不要这样。比如这个字段:repeated ItemDto items = 1。在编译成Java代码时,protoc会生成下面这些方法:

public List<ItemDto> getItemsList()
public int getItemsCount()
public ItemDto getItems(int index)

看到了吧,这三个方法里,都使用了item的复数形式,这是非常奇怪的。

枚举

枚举名和消息名保持一致,枚举值使用大写字母+下划线,例如:

例如:

enum Foo {
  FIRST_VALUE = 1;
  SECOND_VALUE = 2;
}

参考资料

Protobuf Style Guide

时间: 2024-11-27 21:40:12

Protobuf最佳实践(2)-- 命名规则的相关文章

Protobuf最佳实践(1)-- Sublime工程

本文以及后续的几篇文章,是我自己使用Protobuf的一些经验之谈.这些经验是我在开发游戏服务器时获得的,所以并不一定适用于其他领域.另外,这里所谓的最佳实践,其实包含了很多个人偏好. Sublime工程 从某种程度上讲,Protobuf也算是一种语言,保存这种语言的文件一般以.proto作为后缀.既然是语言,那么就需要编译(它的编译器就是protoc),也需要一个语法着色的编辑器.只要花上几分钟的时间,就可以把Sublime打造成一个适合编写Protobuf的IDE,具体请参考这篇文章. 目录

17条 Swift 最佳实践规范

本文由CocoaChina译者小袋子(博客)翻译自schwa的github主页原文作者:schwa 这是一篇 Swift 软件开发的最佳实践教程. 前言 这篇文章是我根据在 SwiftGraphics 工作时的一系列笔记整理出来的.文中大多数建议是经过深思熟虑的,但仍可以有其他类似的解决方法.因此,如果其他方案是有意义的,这些方案会被添加上去. 这个最佳实践不是强加或者推荐 Swift 在程序.面向对象或者函数风格上的应用.更重要的是,这里要讲述的是务实的方法.如有需要的话,某些建议可能会集中在

python高级编程之选择好名称:pepe8和命名最佳实践

# # -*- coding: utf-8 -*- # # python:2.x # __author__ = 'Administrator' # my_list=['a','b','c','d'] # """ # 大部分标准程序加在构建时都不会忽略可用性,看下面的例子理解下这句话的含义 # """ # if 'e' not in my_list: #     my_list.append('e') # print my_list # #['a'

PHP核心技术与最佳实践之正则表达式匹配规则

PHP核心技术与最佳实践之正则表达式匹配规则 本文介绍几种常用的匹配规则. 1.     字符组 查找数字.字母.空白很简单,因为已经有了对应这些集合的元字符,但是如果匹配没有预定义元字符的字符集合,方法很简单, 就是在方括号内列出它们. 例如:[aeiou]匹配任何一个英文元音字母,[.*?]匹配标点中的一个.注意此时方括号内的元字符失去了特殊意义. 也可以指定字符范围,例如[0-9]的含义和\d完全一致:代表一位数字:同理[a-zA-Z0-9]等同于\w; 字符组很简单,但是一定要弄清楚字符

Artifactory 仓库架构和命名最佳实践(下)

在上篇文章中,我们已经建立了基本的仓库命名结构,在 JFrog Artifactory 中,仓库管理的最佳实践应该考虑三个因素:安全性,性能和可操作性.大多数情况下,这些因素跟你的团队规模密切相关,在较小程度上跟仓库成熟度等级的粒度划分有一定的关系. 安全 Artifactory 允许通过包含/排除模式在单个文件夹甚至文件级别进行管理权限.一般来说,这里的最佳做法是在仓库级别管理权限.对于具有高度结构化的仓库(如 Maven 和 RPM),可以在文件夹级别实现细粒度的控制.但是,对于管理员来说,

自己总结的C#编码规范--3.特定场景下的命名最佳实践

特定场景下的命名最佳实践 命名空间 要使用PascalCasing,并用点号来分隔名字空间中的各个部分. 如Microsof.Office.PowerPoint 要用公司名作为命名空间的前缀,这样就可以避免与另外一家公司使用相同的名字. 要用稳定的,与版本无关的产品名称作为命名空间的第二层 不要使用公司的组织架构来决定命名空间的层次结构,因为内部组织结构经常改变. 不要用相同的名字来命名命名空间和该空间内的类型. 例如,不要先将命名空间命名为Debug,然后又在该空间中提供Debug类.大部分编

Atitit.&#160;软件设计&#160;模式&#160;变量&#160;方法&#160;命名最佳实践&#160;vp820&#160;attilax总结命名表大全

Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全 1. #====提升抽象层次 1 2. #----使用通用单词 1 3. #===使用术语.. 1 4. #===使用缩写 2 5. #====自己最孰的语言(diaglog??) 2 6.  2 7. #====normal naming + anno 2 8. #----jsp页面的名称,最好不个mod_list.jsp 2 9. 名词优先与动词 2 10. 变量的常用前缀 2 11. 常用命

第 3 章 镜像 - 018 - 镜像命名的最佳实践

为镜像命名 创建镜像时 docker build 命令时已经为镜像取了个名字,例如:  docker build -t ubuntu-with-vi 这里的 ubuntu-with-vi 就是镜像的名字.通过 dock images 可以查看镜像的信息. 1 [email protected]:~# docker images ubuntu-with-vi 2 REPOSITORY TAG IMAGE ID CREATED SIZE 3 ubuntu-with-vi latest b5410df

[1.30] 保持的力量:接口开发最佳实践

神啊,求你赐给我平静的心,去接受我无法改变的事:赐给我勇气,去做我能改变的事:赐给我智慧,去分辨两者的不同. --平静之祷 1.30.1 论保持的力量 追到一个心仪的女生不难,难于如何保持和培养一份真挚的感情:获得一时的财富也不难,难于如何长久保持收益:创业的公司很容易博得一时媒体的关注以及某次天使的投资,但难于如何排除各种障碍.充分利用各方资源发展成中企业及至上市公司. 同样,提供一时的接口很容易,但当我们需要不断为接口提供升级,以及当我们维护提供一整套接口时,面临的困难和问题会越来越大.所以