Буферы протокола: поля только для чтения? - PullRequest
1 голос
/ 26 мая 2019

Можно ли пометить поля только для чтения в файле .proto, чтобы при создании кода эти поля не имели установщиков?

1 Ответ

1 голос
/ 26 мая 2019

В конечном счете, я думаю, что ответ здесь будет «нет». Есть хорошее базовое правило руководства, которое применяется к DTO:

  • DTO, как правило, должны быть настолько просты, насколько это возможно, для передачи данных для сериализации таким образом, который хорошо подходит для конкретного сериализатора.
  • если этой базовой модели достаточно для работы с над этим слоем , тогда отлично
  • но если нет: не боритесь с сериализатором ; вместо этого создайте отдельную модель предметной области над уровнем DTO и просто сопоставьте две модели до сериализации или после десериализации

Или, говоря иначе: тот факт, что генератор не хочет показывать элементы только для чтения, не имеет значения, потому что если вам нужно что-то экзотическое, вам не следует использовать сгенерированный тип вне кода, который напрямую касается сериализации , Итак: в вашем типе домена, который отражает DTO: сделайте его доступным только для чтения там .

Что касается , почему поля, доступные только для чтения, обычно не используются в инструментах сериализации: вы, вероятно, хотите иметь возможность дать ему значение. Инструменты сериализации обычно хотят иметь возможность писать все, что умеют читать, и читать все, что умеют писать.


Незначительное примечание для полноты, так как вы упомянули C #: если вы используете подход с первым кодом для protobuf-net, он будет хорошо работать только с {get;} -подключением, только с {get;} -подключением только вручную. , если , все открытые члены тривиально отображаются в очевидный конструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...