协议缓冲区:只读字段?

mar*_*nny 5 protocol-buffers

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

Mar*_*ell 3

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

  • DTO 通常应尽可能简单,以便以适合特定序列化器的方式传送序列化数据。
  • 如果该基本模型足以让您在该层之上使用,那么很好
  • 但如果不是:不要与序列化器对抗;相反,在DTO 层之上创建一个单独的域模型,并在序列化之前或反序列化之后简单地在两个模型之间进行映射

或者换句话说:生成器不想公开只读成员这一事实是无关紧要的,因为如果您需要一些奇特的东西,则不应在直接涉及序列化的代码之外使用生成的类型。因此:在您的域中键入镜像 DTO:将其设置为只读

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


自从您提到 C# 以来,为了完整性,需要注意一下:如果您在 protobuf-net 中使用代码优先方法,那么如果所有公共成员都简单地映射到一个明显的映射,则它可以{get;}与仅自动道具一起正常工作,并且{get;}仅使用手动道具构造函数。