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.
- Textos con saltos de linea: texto
- Fecha y hora: datehm
- Importes con unidades: agregar prefix o suffix
- 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:
- Date: 70
- Datetime: 110
- Datehm: 90
- Text: 100 a 300
- Numeros: dependiendo de la logintud, entre 50 y 150
- Boolean: 50 (o menos)
Alinear columnas:
- boolean, ids, iconos: alinear al CENTRO
- Valores (con o sin prefix pesos, porcentajes, etc) a la DERECHA
- 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
- Agregar un registro
- Editar un registro (que recupero todos los campos correctamente)
- Borrar un registro
- Clic en cada Acción o Boton de la grilla
- 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;