You are on page 1of 9

Una lista de tips que he ido aprendiendo con el tiempo y me han sido funcionales.

1) utilizar solo lo que se necesite: ya sea en java o en jsp las personas tienden a importar el paquete completo en vez de importar la o las clases necesarias; por ejemplo: mala practica 1import java.ultil.*; buena practica 1import java.ultil.List; 2import java.ultil.HashMap; 3import java.ultil.Date; lo que sucede es que al decir * el carga todas las clases aunque sea muy poco utiliza mas tiempo del necesario. 2) utilizar solo lo que se necesite: ya sea en java o en jsp o en cualquier otro lenguaje evitar usar el * en las consultas a la bd ; por ejemplo: mala practica 1select * from Departamento; buena practica 1select campo1,campo2,campo3,campo4,campo5,campo6 from Departamento; aunque tardemos un poco mas al usar el * el motor de base de datos hace una subconsulta para conocer los campo, y en vez de ser una consulta son 2, ademas si la tabla tiene 20 campos los trae todos as necesitemos 1 o 2 y la consulta tardar mas. 3) en java o jsp, llamar los resultados de la BD por su nombre ejemplo: mala practica 1 public static Departamento load(ResultSet rs) throws SQLException { 2 Departamento departamento = new Departamento(); 3 departamento.setId(rs.getInt(1)); departamento.setNombre(rs.getString(2)); 4 departamento.setDescripcion(rs.getString(3)); 5 return departamento; 6} 7 buena practica 1public static Departamento load(ResultSet rs) throws SQLException { Departamento departamento = new Departamento(); 2 departamento.setId(rs.getInt("ID")); 3 departamento.setNombre(rs.getString("NOMBRE"));

4 5 6 7

departamento.setDescripcion(rs.getString("DESCRIPCION")); return departamento; }

si por alguna razn el orden de los campos de la tabla, cambia esto no afectar la forma de cargar los datos. 4) Cerrar las conexiones, ya sea a los puertos paralelos, bases de datos, archivos en el disco duro, sockets: muchas veces las conexiones se manejan por una pila y si no se cierran ser imposible usar otra. hace algn tiempo en una trabajo que estaba haciendo olvide cerrar el puerto paralelo y toco reiniciar el pc y deep freeze hizo lo suyo y a comenzar de nuevo. 5) por pequea que sea la aplicacin realiza el diseo, utiliza un patrn de desarrollo y escribe la documentacin, en caso de que la aplicacin crezca, ser mucho mas fcil adaptarla, es traumtico modificar una aplicacin despus de un tiempo (digamos 6 meses) y no recuerdas lo que hiciste. 6) existe un concepto de llave natural y llave primaria digamos la clase Estudiante la llave natural seria el numero de identificacin y la llave primaria seria un secuencial automtico de la base de datos Por qu? porque si usamos identificacin como llave primaria al momento que cambiemos esta identificacin tendramos que hacer una actualizacin en cascada, lo cual ya no seria una sola sentencia SQL sino 1+N, siendo N el numero de registros relacionados, (Pagos, Materias, Notas, Cursos, etc). por el contrario si usamos una llave primaria totalmente independiente del objeto Estudiante podramos modificar la identificacin y no afectara en nada a la integridad referencial. para mi caso cree una clase llamada DTO que primero se vio de as DTO.java 1 package org.ingenio; 2 import java.io.Serializable; 3 import java.lang.Comparable; import java.sql.ResultSet; 4 import java.sql.SQLException; 5 6 public abstract class DTO implements Serializable,Comparable{ 7 private Long secuencial; 8 9 protected Long getSecuencial(){ 10 return secuencial; 11 } 12 13 protected void setSecuencial(Long secuencial){ 14 this.secuencial=secuencial; } 15

16 17 18 } 19 20 21

public abstract DTO load(ResultSet rs) throws SQLException; public abstract String toString();

y el ejemplo del DTO Estudiante seria: Estudiante.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39


package org.ingenio; import import import import import java.io.Serializable; java.lang.Comparable; java.sql.ResultSet; java.sql.SQLException; java.sql.Date;

public class Estudiante extends DTO{ private private private private private private private String nombre = ""; String apellido = ""; Integer identificacion = 0; String codigo = ""; String curso = ""; Date fdn = new Date(new java.util.Date().getDate()); String foto="sinfoto.jpg";

public Estudiante(){ super(); } public String getNombre(){ return nombre; } public String getApellido(){ return apellido; } public Integer getIdentificacion(){ return identificacion; } public String getCodigo(){ return codigo; } public String getCurso(){ return curso; } public Date getFdn(){ return fdn; } public String getFoto(){ return foto; } public void setNombre(String nombre ){ this.nombre=nombre; }

public void setApellido(String apellido ){ 40 this.apellido=apellido; 41 } 42 public void setIdentificacion(Integer identificacion ){ 43 this.identificacion=identificacion; } 44 public void setCodigo(String codigo ){ 45 this.codigo=codigo; 46 } 47 public void setCurso(String curso ){ 48 this.curso=curso; } 49 public void setFdn(Date fdn ){ 50 this.fdn=fdn; 51 } 52 public void setFdn(java.util.Date fdn ){ this.fdn=new Date(fdn.getTime()); 53 } 54 public void setFoto(String foto ){ 55 this.foto=foto; 56 } 57 58 public String toString(){ return( 59 "DATOS:::EMPLEADO:::...\n"+ 60 "SECUENCIAL : "+this.getSecuencial()+"\n"+ 61 "NOMBRE : "+nombre+"\n"+ 62 "APELLIDO : "+apellido+"\n"+ 63 "IDENTIFICACION : "+identificacion+"\n"+ "DEPARTAMENTO : "+codigo+"\n"+ 64 "CURSO : "+curso+"\n"+ 65 "FDN : "+fdn+"\n"+ 66 "FOTO : "+foto+"\n"+ 67 ""); } 68 69 public DTO load(ResultSet rs) throws SQLException { 70 Estudiante estudiante = new Estudiante(); 71 estudiante.setSecuencial(rs.getLong("SECUENCIAL")); 72 estudiante.setNombre(rs.getString("NOMBRE")); 73 estudiante.setApellido(rs.getString("APELLIDO")); estudiante.setIdentificacion(rs.getInt("IDENTIFICACION")); 74 estudiante.setCodigo(rs.getString("DEPARTAMENTO")); 75 estudiante.setCurso(rs.getString("CURSO")); 76 estudiante.setFdn(rs.getDate("FDN")); 77 estudiante.setFoto(rs.getString("FOTO")); return estudiante; 78 } 79 80 public int compareTo(Object estudiante){ 81 return 82 (this.apellido).compareTo(((Estudiante)estudiante).getApellido()); 83 } } 84 85 86 87 88 89

90 91 92 93 94 95 96 97 98 99 100 7) hablando de no afectar en nada a la integridad referencial, en aplicaciones donde varios usuarios tienen acceso y poder de edicin sobre la misma informacin al mismo tiempo. Digamos que varias personas se disponen a realizar cambios sobre un mismo registro al momento de realizar los cambios los primeros en guardar podra ver su trabajo afectado ya que el ultimo en guardar podra eliminar los cambios hechos por los anteriores. para solucionar eso al momento de realizar la consulta Select que nos trae el registro adicionar pedimos el MD5 del registro: 1 2 3 Select secuencial, 4 nombre, 5 apellido, 6 identificacion, 7 codigo, curso, 8 fdn, 9 foto, 10 md5( 11 secuencial+ nombre+ 12 apellido+ 13 identificacion+ 14 codigo+ 15 curso+ 16 fdn+ foto 17 ) as MD5 18 from 19 Estudiantes 20where secuencial=? 21 22 23 y al momento de realizar un delete o un update verificar este MD5 ejemplo

1 2 delete 3 from Estudiantes 4 where 5 secuencial=? 6 and 7 md5( 8 secuencial+ nombre+ 9 apellido+ 10 identificacion+ 11 codigo+ 12 curso+ fdn+ 13 foto 14 )=? 15 16 y esto tambin afecto la clase DTO dejndola de esta manera: DTO.java 1 2 3 package org.ingenio; 4 import java.io.Serializable; import java.lang.Comparable; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 8 public abstract class DTO implements Serializable,Comparable{ 9 private Long secuencial; 10 private String MD5; 11 12 protected Long getSecuencial(){ 13 return secuencial; 14 } protected String getMD5(){ 15 return MD5; 16 } 17 18 protected void setSecuencial(Long secuencial){ 19 this.secuencial=secuencial; 20 } protected void setMD5(String MD5){ 21 this.MD5=MD5; 22 } 23 24 public abstract DTO load(ResultSet rs) throws SQLException; 25 public abstract String toString(); 26} 27 28

y el DTO estudiante: Estudiante.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46


package org.ingenio; import import import import import java.io.Serializable; java.lang.Comparable; java.sql.ResultSet; java.sql.SQLException; java.sql.Date;

public class Estudiante extends DTO{ private private private private private private private String nombre = ""; String apellido = ""; Integer identificacion = 0; String codigo = ""; String curso = ""; Date fdn = new Date(new java.util.Date().getDate()); String foto="sinfoto.jpg";

public Estudiante(){ super(); } public String getNombre(){ return nombre; } public String getApellido(){ return apellido; } public Integer getIdentificacion(){ return identificacion; } public String getCodigo(){ return codigo; } public String getCurso(){ return curso; } public Date getFdn(){ return fdn; } public String getFoto(){ return foto; } public void setNombre(String nombre ){ this.nombre=nombre; } public void setApellido(String apellido ){ this.apellido=apellido; } public void setIdentificacion(Integer identificacion ){ this.identificacion=identificacion; } public void setCodigo(String codigo ){ this.codigo=codigo;

} 47 public void setCurso(String curso ){ 48 this.curso=curso; 49 } 50 public void setFdn(Date fdn ){ this.fdn=fdn; 51 } 52 public void setFdn(java.util.Date fdn ){ 53 this.fdn=new Date(fdn.getTime()); 54 } 55 public void setFoto(String foto ){ this.foto=foto; 56 } 57 58 public String toString(){ 59 return( 60 "DATOS:::EMPLEADO:::...\n"+ "SECUENCIAL : "+this.getSecuencial()+"\n"+ 61 "NOMBRE : "+nombre+"\n"+ 62 "APELLIDO : "+apellido+"\n"+ 63 "IDENTIFICACION : "+identificacion+"\n"+ 64 "DEPARTAMENTO : "+codigo+"\n"+ 65 "CURSO : "+curso+"\n"+ "FDN : "+fdn+"\n"+ 66 "FOTO : "+foto+"\n"+ 67 ""); 68 } 69 70 public DTO load(ResultSet rs) throws SQLException { 71 Estudiante estudiante = new Estudiante(); estudiante.setSecuencial(rs.getLong("SECUENCIAL")); 72 estudiante.setNombre(rs.getString("NOMBRE")); 73 estudiante.setApellido(rs.getString("APELLIDO")); 74 estudiante.setIdentificacion(rs.getInt("IDENTIFICACION")); 75 estudiante.setCodigo(rs.getString("DEPARTAMENTO")); estudiante.setCurso(rs.getString("CURSO")); 76 estudiante.setFdn(rs.getDate("FDN")); 77 estudiante.setFoto(rs.getString("FOTO")); 78 estudiante.setMD5(rs.getString("MD5")); 79 return estudiante; 80 } 81 public int compareTo(Object estudiante){ 82 return 83 (this.apellido).compareTo(((Estudiante)estudiante).getApellido()); 84 } 85 } 86 87 88 89 90 91 92 93 94 95 96

97 98 99 100 101 8) usar logs, que la aplicacin lleve un registro de quien hace que en que momento, cosas que recomiendo guardar en logs:

Excepciones (cualquier excepcin guardarla en el log) Errores (cualquier error guardarla en el log) Operaciones exitosas (registros, eliminaciones, ediciones, inicios de sesin)

de esta manera el administrador podr conocer quien realizo una operacin y en que momento la realizo, tambin es una herramienta que sirve para conocer el desempeo del software.

You might also like