编程语言独立模型validation
假设您在基础架构中使用多种不同的编程语言和框架来处理大量流量等。
示例堆栈:
- 事件驱动的API服务器(使用Scala,node.js,Ruby EM)
- 标准的完整堆栈webapp(例如Rails)
- (也许更多的技术)
当使用不同的语言和框架时,我通常最终会复制大多数模型validation,因为每个“客户入口点”都需要validation其输入。 保持同步当然是一种痛苦。
没有像CORBA这样的东西你会如何处理?
您最好的选择是允许您以与语言无关的格式(如JSON)指定模型validation的框架。 您最终可能会得到各种validation架构,例如:
{ "name": [ { "validate": "length", "minLength": 6, "maxLength": 10 }, ... ], ... }
然后,您将拥有可以解析此格式的特定于语言的validation器。 validation器只需要编写一次,然后为每个模型维护一个模式。
但是,这可能听起来很像CORBA / SOAP / Thrift / ProtocolBuffers / etc。 在此刻。 那是因为它们是为解决这些类型的问题而编写的,如果你自己编写,你最终会重新发明一些轮子。
我会继续使用正则表达式的“字典”。 正则表达式由您计算的所有语言支持 – 并且 – 将字符串表示从一种语言翻译成另一种语言可以通过将表达式本身传递给正则表达式来完成…
根据我的观察 – 然后为每种语言编写解析和执行机制的工作要少得多……
像之前建议的那样 – 您可以以不可知的格式保存Reg-Exps的“字典”,例如JSON。 这将重复的工作缩小到 –
- 您维护的validation表达式的一个源文件
- 每种编程语言:
- 转换器从主文件到目标语言的格式
- 薄机制
- 阅读JSON,
- 从中选择配置的检查
- 执行它们
- 边缘情况(如果有的话)
玩得开心 :)
要添加到@Nathan Ostgard的post,XML,XSD以及必要时XSLT也可以正常工作。 这样做的好处是:a)XSD内置了简单的validationb)大多数语言都对此有很好的支持c)你不必在每种语言中编写validation; 在模式中没有处理的东西可以在XSLT中编写一次(注意XSLT实现往往会有所不同:))
如果你想要完全validation的方式,我会使用SOAP。 至少,只要你有SOAP库,你需要提供的只是接口的WSDL。