Мы сталкиваемся с проблемами качества кода из-за встроенных запросов mysql. Имея SELF написанный MySQL запросов действительно загромождает код, а также увеличивает базовый код и т.д.Где хранить команды SQL для выполнения
Наш код завален вещи, как
/* beautify ignore:start */
/* jshint ignore:start */
var sql = "SELECT *"
+" ,DATE_ADD(sc.created_at,INTERVAL 14 DAY) AS duedate"
+" ,distance_mail(?,?,lat,lon) as distance,count(pks.skill_id) c1"
+" ,count(ps.profile_id) c2"
+" FROM TABLE sc"
+" JOIN "
+" PACKAGE_V psc on sc.id = psc.s_id "
+" JOIN "
+" PACKAGE_SKILL pks on pks.package_id = psc.package_id "
+" LEFT JOIN PROFILE_SKILL ps on ps.skill_id = pks.skill_id and ps.profile_id = ?"
+" WHERE sc.type in "
+" ('a',"
+" 'b',"
+" 'c' ,"
+" 'd',"
+" 'e',"
+" 'f',"
+" 'g',"
+" 'h')"
+" AND sc.status = 'open'"
+" AND sc.crowd_type = ?"
+" AND sc.created_at < DATE_SUB(NOW(),INTERVAL 10 MINUTE) "
+" AND sc.created_at > DATE_SUB(NOW(),INTERVAL 14 DAY)"
+" AND distance_mail(?, ?,lat,lon) < 500"
+" GROUP BY sc.id"
+" HAVING c1 = c2 "
+" ORDER BY distance;";
/* jshint ignore:end */
/* beautify ignore:end */
мне пришлось размойте код немного.
Как вы можете видеть, повторение этого кода в коде просто не читается. Также из-за того, что atm мы не можем перейти на ES6, что, по крайней мере, довольно немного, благодаря многострочным строкам.
Вопрос в том, есть способ сохранить эти процедуры SQL в одном месте? В качестве дополнительной информации мы используем node (~ 0.12) и express, чтобы открыть API, получив доступ к MySQL db.
Я уже думал, используя JSON, что приведет к еще большему беспорядку. Кроме того, это может быть даже невозможно, поскольку кодировка JSON немного строгая, и JSON, вероятно, не понравится иметь многострочные строки.
Затем я придумал идею хранения SQL в файле и загрузки при запуске приложения-узла. Это на данный момент мой лучший шанс получить SQL-запросы в ОДНОМ месте и предложить их остальным модулям узлов. Вопрос здесь, используйте ОДИН файл? Использовать один файл для каждого запроса? Использовать один файл в таблице базы данных?
Любая помощь приветствуется, я не могу быть первой на планете, решая это, поэтому, возможно, у кого-то есть рабочее, приятное решение!
PS: Я пытался использовать libs, как squel, но это действительно не помогает, так как наши запросы сложны, как вы можете видеть. Речь идет, главным образом, о том, чтобы НАШИ запросы были в «центральном запросе».
Могу ли я узнать, почему вы не можете пойти на ES6, поскольку я вижу, что это не повлияет на ваш существующий код? Для этого вам просто нужно использовать транспилер. –
Слишком много зависимостей на данный момент, по крайней мере, это то, что мне говорят: S Я также попытался перейти на узел 6.5, но приложение вылетает при запуске. На данный момент я пытаюсь получить SQL-команды в центральную. Если node6.x - возможный решатель проблем, я должен был бы предложить его и заставить его работать. – m4mbax
Вы можете рассмотреть возможность введения представлений в базу данных, чтобы упростить некоторые из запросов SELECT (например, ваш пример). И, возможно, также хранимые процедуры для упрощения запросов, которые каким-то образом обновляют данные. Конечно, есть достоинства и недостатки этого подхода - необходимо сохранить взгляды/хранимые процедуры, и иногда существует опасность их добавления к безвестности (например, представления, которые включают другие виды), возможно, придется немного развернуться, чтобы выяснить, что фактические таблицы). Но это может быть полезно, например. когда одни и те же соединения или критерии WHERE используются снова и снова. –