编程语言独立模型验证

时间:2011-03-11 21:39:33

标签: javascript ruby validation scala architecture

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

示例堆栈:

  1. 事件驱动的API服务器(使用Scala,node.js,Ruby EM)
  2. 标准的完整堆栈webapp(例如Rails)
  3. (也许更多技术)
  4. 当使用不同的语言和框架时,我通常最终会复制大多数模型验证,因为每个“客户入口点”都需要验证其输入。这当然是一种保持同步的痛苦。

    如果没有像CORBA这样的东西你会如何处理?

4 个答案:

答案 0 :(得分:6)

您最好的选择是允许您以与语言无关的格式(如JSON)指定模型验证的框架。您最终可能会得到各种验证模式,例如:

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

然后,您将拥有可以解析此格式的语言特定验证器。验证器只需要编写一次,然后为每个模型维护一个模式。

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

答案 1 :(得分:1)

我会继续使用正则表达式的“字典”。 您计算的所有语言都支持正则表达式 - 并且 - 将字符串表示从一种语言翻译成另一种语言可以通过将表达式本身传递给正则表达式来完成...

根据我的观察 - 为每种语言编写解析和执行机制的工作要少得多......

像之前建议的那样 - 您可以以不可知的格式保存Reg-Exps的“字典”,例如JSON。 这将重复的工作缩小到 -

  • 您维护的验证表达式的一个源文件
  • 每种编程语言:
    • 从主文件转换为目标语言的格式
    • 薄机制
      1. 阅读JSON,
      2. 从中选择已配置的支票
      3. 执行它们
    • 边缘情况(如果有的话)

玩得开心:)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果你想要完全验证的方式,我会使用SOAP。至少,只要你有SOAP库,你需要提供的就是接口的WSDL。