Buenas Prácticas

Identar código

Los bloques de código siempre deben estar identado por un tab, asi cualquier usuario puede seguir el código con facilidad.

if(a>0)
{
// codigo
}

Formatos de las columnas

En los colMoldels, resulta muy importante entender cada formato, y utilizar el correspondiente.

  1. Textos con saltos de linea: texto
  2. Fecha y hora: datehm
  3. Importes con unidades: agregar prefix o suffix
  4. Importes porcentuales: agregar suffix


Tambien es muy importante optimizar los tamaños (anchos) de las columnas, ya que esto brinda una mejor experiencia al usuario final. Si el formato de la columna es:

  1. Date: 70
  2. Datetime: 110
  3. Datehm: 90
  4. Text: 100 a 300
  5. Numeros: dependiendo de la logintud, entre 50 y 150
  6. Boolean: 50 (o menos)

Alinear columnas:

  1. boolean, ids, iconos: alinear al CENTRO
  2. Valores (con o sin prefix pesos, porcentajes, etc) a la DERECHA
  3. EL resto a la IZQUIERDA

Formularios y campos RELA

Si un campo RELA tiene:

  • Menos de 30 registros: utilizar flexCombo
  • Mas de entre 30 y 100 registros: utilizar flexCombo con advance true
  • Mas de 100 registros: utilizar flexGridAutoComplete, AutoComplete (a partir de la verssión 3.2, se puede utilizar paginado).
    • flexGridAutoComplete: Si hay que mostrar mas de 2 campos de la BD
    • AutoComplete: Si hay que mostrar hasta 2 campos de la BD


Grillas con op

Si un grid tiene un op, el parámetro "name" debe tener el mismo prefijo de la tabla principal, para que no haga inner join (a no ser que se desee forzar el join).

Optimizar Consultas a la Base de Datos

Es importante optimizar las consultas a la Base de Datos, evitando:

  • Consultar más de una vez a la misma tabla en un mismo php (sin necesidad).
  • Realizar inner joins innecesarios
  • Utilizar ASTERICO en la consulta. Seleccionar los campos necesarios 

Buscador avanzado

Si una tabla (flexgrid) va a mostrar más de 10 registros, incluir SIEMPRE un buscador avanzado.

Diseño de formularios

Al momento de diseñar un formulario, es importante que pensar:

  • Para elegir el tipo de campo: que tipo información el cliente (final) va a ingresar en cada campo?
  • Para elegir el ancho: cuantos caracteres suelen ingresar en cada campo?
  • Para elegirla ubicación: que campos deberían estar más cerca unos de otros (por ejemplo, tipo de documento, con el número de documento)
  • Para usar tabs o separadores: cuantos campos tiene el formulario? el cliente podrá "entender" mejor si divido el formulario en áreas (con tabs o separadores)
  • Ubicación: Si los campos estan "relacionados" conceptualmente, ponerlos uno al lado del otro (considerando el ancho total de los monitores basicos)

Testing Básico

Al desarrollar un módulo, SIEMPRE es necesario probrar
  1. Agregar un registro
  2. Editar un registro (que recupero todos los campos correctamente)
  3. Borrar un registro
  4. Clic en cada Acción o Boton de la grilla
  5. Cada componente especial del formulario (uploads, maps, etc)

Redondeos

En javascript, usar la función del framework:

roundNumber(number,decimal)

En mysql, los campos deben ser DECIMAL

Logs

Registrar logs todos los errores: En urlValida u onSubmit, DESPUES del rollback

Registrar logs de todos los inserts, updates o deletes manuales (en procesos simples o complejos)

// VALIDACIONES 
$ result =flex_query("ROLLBACK",$ link_msq);
agregar_control("ABM",$ action,$ xml,$ json_request,$ link_msq);

//PROCESOS MANUALES
agregar_control("ABM","nombre_proceso",$ xml,$ json_request,$ link_msq);

Funciones PHP

Al utilizar una función, siempre deben devolver un array con al menos tres valores

// devuelve error
return array("error","Texto error","Debug error");

// devuelve warning
return array("warning","Texto Warning","Debug Warning","PARAM1","PARAM2", Nparam);

// devuelve done
return array("done","PARAM1","PARAM2", Nparam);

Gestión de Archivos Uploads

Todos los sistemas alojados en servidores NO exclusivos deben guardar los archivos uploads o archivos pdf generados por php, en el STORAGE propio de cada sistema


Al guardar archivos, NUNCA poner el path relativo. Lo ideal es hacer un IF

if(upload storage)

// usar upload storage

else

// usar path global


Al crear carpetas según ID empresas o similiar, usar SUBCARPETAS (siempre deben estar creadas en una carpeta principal). Por ejemplo:

carpeta_facturas

-> facturas_empresa_1

-> facturas_empresa_2

Normalización de Variables PHP

Cada dato recuperado de la base de datos debe ser almacenada en una variable PHP con el mismo nombre del campo en la base de datos


$field_name=$row['field_name'];


Al utilizar acumuladores en una consulta a la base de datos, utilizar como nombre de la variable el nombre del campo + _acumulador. Por ejemplo:

select sum(field_name) as field_name_sum 


Al utilizar una variable php como acumulador, por ejemplo dentro de un while, utilizar como nombre de la variable el nombre del campo + _acumulador. Por ejemplo:

$field_name_sum+=$field_name;


Al utilizar una variable php como acumulador que no representa la suma de un campo en la base de datos, el nombre de la variable debe ser lo suficientemente representativo, por ejemplo


$importe_total_a_pagar+=$importe;