协议缓冲区:只读字段?

时间:2019-05-26 03:56:03

标签: protocol-buffers

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

1 个答案:

答案 0 :(得分:1)

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

  • DTO通常应尽可能简单,以适合特定序列化程序的方式传送数据进行序列化。
  • 如果该基本模型足以让您使用位于该层以上,则可以
  • 但如果不是,则:不要与序列化程序发生冲突;而是在DTO层上方 创建一个单独的域模型,并在序列化之前或反序列化之后简单地在两个模型之间进行映射

或者换句话说:生成器不想公开只读成员这一事实是不相关的,因为如果您需要一些奇特的东西,那么您不应在直接接触序列化的代码之外使用生成的类型。因此:在与DTO相同的域类型中:将其设为只读那里

至于为什么只读字段在序列化工具中通常不是一回事:您大概希望能够为其赋予一个值。序列化工具通常希望能够编写其可以读取的所有内容,并读取其可以编写的所有内容。


自从提到C#以来,完整性方面的次要注意事项:如果您在protobuf-net上使用代码优先方法,则可以与仅{get;}的自动道具以及{get;}一起使用唯一的手动道具 if 所有公共成员都轻而易举地映射到一个明显的构造函数。