c++ - 如何简化 C++ 中复杂的嵌套 protobuf 验证?

标签 c++ validation protocol-buffers

我在消息传递应用程序中使用 Google Protocol Buffer 。 proto 通常嵌套了好几层,我们采纳了 Google 的建议并将它们全部设为可选。原型(prototype)可以描述许多不同类型的重叠消息——即 Type == X 的消息应该包含成员 my_X,Type == Y 应该包含 my_Y。此外,某些字段组合对哪些字段应该出现以及它们应该具有什么值施加了其他限制。更改原型(prototype)的结构超出了我的能力范围。

现在,所有这些验证都是一堆 if..else 语句。如果案例不重叠,那可能是可行的,但验证案例可能会对某个字段施加不同的限制,因此它会变得非常难看。有没有更好的办法?我的目标是使代码更易于维护。我稍微研究了仿函数/谓词,看起来这可能会简化问题,但它似乎仍然是一团糟。

最佳答案

如果代码开始包含太多 ifs 和 elses,那么有时表驱动方法就是解决方案。 Code Complete Edition 2的第18章通过大量示例很好地解释了这个概念。您可以在 this article 中找到一些示例

希望能有所帮助。

关于c++ - 如何简化 C++ 中复杂的嵌套 protobuf 验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3198325/

相关文章:

c++ - __builtin_ctz 的 valgrind 错误

c++ - constexpr 函数中的静态表

c++ - 递归堆栈溢出 C++

java - 无法运行 Java 验证 (JSR 303)

go - 如何解决与此错误消息的冲突?

c++ - 如何在另一个类的 vector 中调用派生类的析构函数

css - 将 Twitter Bootstrap 验证样式和消息应用于 ASP.NET MVC 验证

java - 使用 Jackson 验证列表元素

xcode - 将协议(protocol)添加到 xcode

python - 如何使用 Python 和 Google 的 Protocol Buffer 来反序列化通过 TCP 发送的数据