Почему JOI более популярен, чем AJV?

Согласно документации SQLite ,

Любой столбец в базе данных SQLite версии 3, за исключением столбца INTEGER PRIMARY KEY, может использоваться для хранения значения любого класс хранения.

blockquote>

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

Итак, возможные решения:

a) встроить целочисленные значения в строку selection без обертывая их в ':

cursor = builder.query(db,
                    new String[]{"col1", "col2", "col3"},
                    "id = " + getSID(db), null, null, null, null);

b) отличает значения от selectionArgs: CAST(? as INTEGER) или CAST(id AS TEXT). Я думаю, что преобразование столбца в TEXT является лучшим решением, потому что правый операнд всегда TEXT, но левым может быть что угодно. Итак:

cursor = builder.query(db,
                    new String[]{"col1", "col2", "col3"},
                    "CAST(id AS TEXT) = ?", 
                    new String[]{getSID(db)}, null, null, null);

-1
задан tkalis 17 January 2019 в 03:21
поделиться

1 ответ

Этот вопрос, скорее всего, будет закрыт из-за того, что он основан главным образом на мнениях, но у меня есть кое-что сказать по этому поводу, поэтому я все равно на него отвечу.

Важным отличием AJV от Joi является то, что AJV - это валидатор JSON Schema, а Joi - валидатор JavaScript. JSON Schema является кроссплатформенной, а Joi работает только на JavaScript. Таким образом, это не выбор между AJV и Joi, а выбор между JSON Schema и Joi.

У каждого подхода есть свои компромиссы, поэтому выбор, который вы выберете, во многом зависит от вашей конкретной ситуации.

AJV / JSON Schema

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

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

Вы можете выбрать AJV / JSON Schema, если вы используете в бэкэнде что-то отличное от JavaScript, или ваше приложение является публичным API, который может использоваться любым количеством приложений на любом количестве языков.

Joi

Самое большое преимущество Joi - это удобство использования. Он прост в использовании, легко расширяется и обладает всеми возможностями JavaScript.

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

Вы можете выбрать Joi, если вы используете JavaScript для внешнего интерфейса и внутреннего интерфейса и не ожидаете клиентов, не поддерживающих JavaScript, которые вам необходимо поддерживать. Это довольно узкая ситуация, но если это ваша ситуация, вы, скорее всего, получите больше или Джой, чем схема AJV / JSON.

Популярность

Звезды Github не являются большой мерой популярности. Если вы посмотрите ежедневные загрузки npm, вы увидите совсем другую историю (AVJ: 18,9 млн, Joi: 2,2 млн). Схема JSON гораздо шире используется, потому что она кроссплатформенная. AVJ - это всего лишь одна реализация на одном языке. Но если ваш стек разработки соответствует определенной нише Joi, он может быть таким же хорошим выбором или лучшим выбором, чем JSON Schema.

0
ответ дан Jason Desrosiers 17 January 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: