独立于编程语言的模型验证

2024-06-10 09:45:41 发布

您现在位置:Python中文网/ 问答频道 /正文

假设您在基础设施中使用了几种不同的编程语言和框架来处理大量的流量等

示例堆栈:

  1. 事件驱动的API服务器(使用Scala,节点.js,红宝石EM)
  2. 标准的全栈webapp(例如Rails)
  3. (也许更多的技术)

当使用不同的语言和框架时,我通常会重复大多数模型验证,因为每个“客户入口点”都需要验证其输入。保持同步当然是件痛苦的事。在

如果没有CORBA之类的东西,您将如何处理这个问题?在


Tags: 服务器框架api示例标准节点堆栈js
3条回答

我会去查一本正则表达式的“字典”。 正则表达式受您计算的所有语言的支持-并且-将它们的字符串表示从一种语言转换为另一种语言可以通过正则表达式传递表达式本身来完成。。。在

根据我的观察,为每种语言编写一个解析和执行机制所需的工作量要少得多。。。在

像前面建议的那样,您可以将这个Reg exp的“字典”保存为一种不可知的格式,比如JSON。 这就把重复的工作缩小到-

  • 您维护的验证表达式的一个源文件
  • 每种编程语言:
    • 从主文件到目标语言格式的转换器
    • 薄机构
      1. 读取JSON
      2. 从中选择配置的检查
      3. 执行他们
    • 边缘情况(如有)

玩得开心:)

最好的选择是一个框架,它允许您以与语言无关的格式(如JSON)指定模型验证。您可能会得到一个类似于验证模式的结果,比如:

{
  "name": [
    {
      "validate": "length",
      "minLength": 6,
      "maxLength": 10
    },
    ...
  ],
  ...
}

然后您将有特定于语言的验证器来解析这种格式。验证器只需要编写一次,然后为每个模型维护一个模式。在

然而,这听起来可能很像CORBA/SOAP/Thrift/ProtocolBuffers/等等。这是因为它们是为解决这类问题而编写的,如果你自己编写的话,你最终会重新发明一些轮子。在

为了添加到@nathanostgard的帖子中,XML、XSD以及必要时的XSLT也可以工作。这样做的好处是a)XSD内置了简单的验证b)大多数语言对此都有很好的支持c)您不必用每种语言编写验证;模式中未处理的内容可以用XSLT编写一次(但要注意XSLT实现往往会有所不同:)

相关问题 更多 >