Рекомендации по интеграции пространств сущностей с Protobuf.Net
Обычно, когда я выполняю сетевую работу, я использую Protobuf для перемещения пользовательских объектов по сети, которые смоделированы для системы, которая создается для перемещения моих данных / составных объектов из других систем.
В настоящее время я участвую в улучшении проекта, в котором используется собственный текстовый протокол, который преимущественно использует текст для сериализации (, | и [] нотаций) данных и пространств сущностей в качестве слоя доступа к данным.
Вопрос, который я задаю, должен ли я создать еще один слой объектов, которые предоставляют сетевые объекты Protobuf, которые заполняются из "загрузки" данных из объектов Entityspaces, или я должен добавить необходимые теги protobuf к объектам в объектах Entityspaces (они автоматически генерируются из базы данных и в настоящее время не имеют этого)
1 ответ
Может пойти в любую сторону. Если вам нужно закодировать данные protobuf в текстовый формат: используйте base-64, что удобно не использовать |
/ [
/ ]
,
Если вы предпочитаете кодировать объекты с протобуфом, которые в настоящее время не приписаны, то есть способы сделать это тоже: если типы из базы данных генерируются как partial
классы, то самое простое, что вы можете сделать (в другом файле кода):
namespace The.Same.Namespace {
[ProtoContract]
[ProtoPartialMember(1, "Foo")]
[ProtoPartialMember(2, "Bar")]
...
partial class SomeEntity {}
}
где Foo
а также Bar
члены, которые вы хотите сериализовать. Или же вы можете настроить всю модель во время выполнения:
RuntimeTypeModel.Default.Add(typeof(SomeEntity), false).Add("Foo", "Bar");
(это очень простая конфигурация; доступны гораздо более тонкие варианты)