• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

226
Views
¿Es mejor tener funciones de consulta separadas o una dinámica?

Estoy trabajando en el backend de una aplicación web que usa node-postgres y tengo curiosidad por saber qué piensan los demás. Necesito consultas de inserción básicas para una tabla de usuarios, una tabla de productos y otras tablas por venir. No quiero código redundante, pero tampoco quiero aflojar la legibilidad. ¿Sería mejor tener varias funciones de consulta similares:

NOTA: createValueString() solo crea una cadena de parámetros ($1, $2, $3)

 async function createUser(user) { const client = await pool.connect(); const userKeys = Object.keys(user).join(","); const userValues = Object.values(user); try { const { rows } = await client.query( ` INSERT INTO users(${userKeys}) VALUES (${createValueString(user)}) RETURNING *; `, userValues ); console.log(`USER CREATED`, rows); return rows; } catch (error) { throw error; } finally { client.release(); } } async function createProduct(product) { const client = await pool.connect(); const productKeys = Object.keys(product).join(","); const productValues = Object.values(product); try { const { rows } = await client.query( ` INSERT INTO products(${productKeys}) VALUES (${createValueString(product)}) RETURNING *; `, productValues ); console.log(`PRODUCT CREATED`, rows); return rows; } catch (error) { throw error; } finally { client.release(); } }

O sería mejor crear una función dinámica:

 async function insertQuery(tableName, item){ const client = await pool.connect(); const itemKeys = Object.keys(item).join(","); const itemValues = Object.values(item); try { const { rows } = await client.query( ` INSERT INTO ${tableName}(${itemKeys}) VALUES (${createValueString(itemValues)}) RETURNING *; `, itemValues ); console.log(`ITEM CREATED`, rows); return rows; } catch (error) { throw error; } finally { client.release(); } }
almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Potencialmente podrías tener ambos. En general, desea que el código sea bastante claro sobre qué código hace qué, así que insertQuery(); no grita exactamente esto crea un usuario. Donde como, createUser(); obviamente lo hace.

Lo que puede tener es una función como executeQuery(sql, params); como tu segunda idea con funciones dinámicas. Como resultado, no tenga código redundante/repetitivo.

Simplemente pase la cadena SQL y los parámetros. Esto funciona y tiene más sentido con los procedimientos almacenados, que es lo que te recomiendo que hagas.

 const executeQuery = (sql, params) => { // sql = "Call stored_procedure_name(parameter list)"; // params = [name, age, etc] // Perform query code .. // pool being a configured database connection object. pool.query(sql, params); }

Luego, tenga las distintas funciones que necesita reutilice esto.

 const createUsers = () => { const sql = "Call createUserProcedure(params)"; const params = [name, age, etc]; const res = executeQuery(sql, params); }

Versión mysql:

 const sql = "CALL CreateUser(?,?);"; const params = [name,age,etc]; const res = await executeQuery(sql, params);
almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error