Protocol buffers 协议缓冲区:只读字段?

Protocol buffers 协议缓冲区:只读字段?,protocol-buffers,Protocol Buffers,是否可以在.proto文件中将字段标记为只读,以便在生成代码时,这些字段没有setter?最终,我认为这里的答案是“否”。有一个适用于DTO的好的基本指导规则: DTO通常应尽可能简单,以适合特定序列化程序的方式传输用于序列化的数据 如果该基本模型足以让您在该层之上使用,则可以 但如果不是:不要与连载器抗争;相反,在DTO层之上创建一个单独的域模型,并在序列化之前或反序列化之后在两个模型之间进行映射 或者换句话说:生成器不想公开只读成员这一事实与此无关,因为如果您需要一些外来的东西,您不应该

是否可以在.proto文件中将字段标记为只读,以便在生成代码时,这些字段没有setter?

最终,我认为这里的答案是“否”。有一个适用于DTO的好的基本指导规则:

  • DTO通常应尽可能简单,以适合特定序列化程序的方式传输用于序列化的数据
  • 如果该基本模型足以让您在该层之上使用,则可以
  • 但如果不是:不要与连载器抗争;相反,在DTO层之上创建一个单独的域模型,并在序列化之前或反序列化之后在两个模型之间进行映射
或者换句话说:生成器不想公开只读成员这一事实与此无关,因为如果您需要一些外来的东西,您不应该在直接涉及序列化的代码之外使用生成的类型。因此:在镜像DTO的域类型中:将其设为只读

至于为什么只读字段在序列化工具中通常不是一件事:您可能希望能够给它一个值。序列化工具通常希望能够编写他们可以读取的所有内容,并读取他们可以编写的所有内容



由于您提到了C#,所以要注意完整性:如果您在protobuf net中使用代码优先的方法,那么它可以与
{get;}
-仅自动道具和
{get;}配合使用
-只有手动道具如果所有公共成员都映射到一个明显的构造函数。

你让protoc生成的目标语言是什么?我的目标是Java和C。