Валидация модели, независимая от языка программирования - PullRequest
6 голосов
/ 12 марта 2011

Допустим, вы используете несколько различных языков программирования и каркасов в своей инфраструктуре для обработки больших объемов трафика и т. Д.

Пример стека:

  1. серверы API, управляемые событиями (используя Scala,node.js, Ruby EM)
  2. стандартное веб-приложение с полным стеком (например, Rails)
  3. (возможно, больше технологий)

При использовании разных языков и фреймворков я обычнов конечном итоге дублирует большинство проверок модели, потому что каждая «точка входа клиента» должна проверять свои входные данные.Это, конечно, боль в синхронизации.

Как бы вы справились с этим без чего-то вроде CORBA?

Ответы [ 4 ]

6 голосов
/ 12 марта 2011

Лучшей вашей ставкой была бы структура, позволяющая указать валидацию модели в не зависящем от языка формате, таком как JSON.Вы можете получить схему проверки типа, скажем:

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

В этом случае у вас будут специальные средства проверки языка, которые могут анализировать этот формат.Валидаторы должны быть написаны только один раз, а затем вы поддерживаете единую схему для каждой модели.

Однако, это, вероятно, звучит очень похоже на CORBA / SOAP / Thrift / ProtocolBuffers / и т.д.с этой точки зрения.Это потому, что они были написаны для решения этих типов проблем, и вы в конечном итоге изобрели несколько колес, если напишите сами.

1 голос
/ 12 марта 2011

Я бы пошел в «словарь» регулярных выражений.Регулярные выражения поддерживаются всеми языками, которые вы посчитали - и - перевод их строкового представления с одного языка на другой может быть выполнен путем передачи самих выражений через регулярные выражения ...

На мой взгляд, это очень многоменьше работы, чем составление механизма разбора и выполнения для каждого языка ...

Как и советовалось ранее - вы можете сохранить этот "словарь" Reg-Exps в независимом формате, таком как JSON.Это сужает дублированную работу до -

  • одного исходного файла выражений проверки, который вы поддерживаете
  • для каждого языка программирования:
    • конвертирование из основного файла в форматцелевого языка
    • тонкий механизм
      1. чтения JSON,
      2. выбор из него сконфигурированных проверок
      3. их выполнение
    • крайние чехлы (если есть)

Веселитесь :)) 1029 *

0 голосов
/ 12 марта 2011

Если вы хотите пройти путь полной проверки, я бы использовал SOAP. По крайней мере, если у вас есть библиотеки SOAP, все, что вам нужно для их подачи, - это WSDL для ваших интерфейсов.

0 голосов
/ 12 марта 2011

Чтобы добавить к сообщению @Nathan Ostgard, XML, XSD и, при необходимости, XSLT также могут работать. Преимущество этого будет: а) в XSD встроена простая валидация; б) большинство языков имеют хорошую поддержку; в) вам не придется писать валидацию на каждом языке; вещи, которые не обрабатываются в схеме, могут быть записаны один раз в XSLT (с оговоркой, что реализации XSLT имеют тенденцию варьироваться :))

...