"Classes should be open for extension but closed for modification."
Un programa no debiere estar preparado para ser modificado, sino, para ser extendido, ej: usando subclases o nuevos métodos que usen a los existentes.
De esa manera, nuevas funcionalidades tienen menos riesgo de afectar a funcionalidades antiguas.
Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884
lunes, 2 de febrero de 2009
jueves, 29 de enero de 2009
Clean Code: Cohesión en clases
Alta cohesión en una clases se ve reflejada en:
Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884
- Bajo número de atributos. Si se usa la estrategia de funciones pequeñas y con pocos argumentos, los atributos subirán en número. Cuando esto pasa es porque la clase se debiera dividir en más clases.
- Cada método usa muchos (ojalá todos) los atributos de la clase. Utopía: todos los métodos usan cada uno de los atributos de la clase.
Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884
miércoles, 28 de enero de 2009
SQL para obtener datetime pasado que sea multiplo de 5
Con este input:
el sgte sql:
produce como resultado:
set @a = '2009-01-28 16:57:50';
el sgte sql:
SELECT DATE_SUB(DATE_SUB(@a, INTERVAL (MINUTE(@a) MOD 5) MINUTE), INTERVAL SECOND(@a) SECOND)
produce como resultado:
2009-01-28 16:55:00
martes, 27 de enero de 2009
Clean Code: Single Responsibility Principle
Single Responsibility Principle: a class or module should have one, and only one reason to change.
Los componentes grandes o con varias responsabilidades tienen varias razones para cambiar: cambios en cualquiera de sus responsabilidades.
Si un componente cambia, hay que probarlo entero. Si el componente es grande, eso es costoso.
Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884
Los componentes grandes o con varias responsabilidades tienen varias razones para cambiar: cambios en cualquiera de sus responsabilidades.
Si un componente cambia, hay que probarlo entero. Si el componente es grande, eso es costoso.
Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884
Clean Code: Class Organization - Java convention
To read a class like a newspaper article:
Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884
class Example {
public static constant;
private static variable;
public static instanceVariable;
public publicVariable; //there is seldom good reason for this
public method1(){
...
}
private method2(){
...
}
}
Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884
lunes, 26 de enero de 2009
Manejo de strings en java provenientes de BD en utf8
Si en una BD tengo string encodeados en utf8, al obtenerlos en un programa java, el java no les hace un decode de utf8, sino que los trata con el encoding default de la jvm (lo cual es indeterminado). Por lo tanto, cualquier tilde en utf8 si se imprime desde el java, se verá como un garabato.
La solución es obtener los bytes que vienen de BD encodeados en latin1 y luego hacerles un decode explicitando que en realidad están en utf8:
titulo = getTituloFromDB();
titulo = new String(titulo.getBytes("latin1"),"UTF-8"));
Así, la variable titulo se podrá ver sin garabatos en una consola utf8.
La solución es obtener los bytes que vienen de BD encodeados en latin1 y luego hacerles un decode explicitando que en realidad están en utf8:
titulo = getTituloFromDB();
titulo = new String(titulo.getBytes("latin1"),"UTF-8"));
Así, la variable titulo se podrá ver sin garabatos en una consola utf8.
lunes, 19 de enero de 2009
Clean Code: Using Third-Party Code
Hay clases en las librerías hechas por externos que ofrecen muchas funcionalidades.
Si se pasan objetos de ese tipo de clases entre métodos de la aplicación, se corre el riesgo de que en algún lado se usen de manera indebida.
Ej: si en java se usa un Map y ese Map es usado en varios métodos (se retorna o se pasa como argumento), se corre el riesgo de que en alguna parte se le haga un delete o un insert siendo que quizás eso no esté dentro de la lógica diseñada desde un principio.
Mejor: Hacer un wrapper de Map y exponer sólo los métodos que caben dentro del diseño de lo que queremos.
Ej:
Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884
Si se pasan objetos de ese tipo de clases entre métodos de la aplicación, se corre el riesgo de que en algún lado se usen de manera indebida.
Ej: si en java se usa un Map y ese Map es usado en varios métodos (se retorna o se pasa como argumento), se corre el riesgo de que en alguna parte se le haga un delete o un insert siendo que quizás eso no esté dentro de la lógica diseñada desde un principio.
Mejor: Hacer un wrapper de Map y exponer sólo los métodos que caben dentro del diseño de lo que queremos.
Ej:
public class Sensors {
private Map sensors = new HashMap();
public Sensor getById(String id) {
return (Sensor) sensors.get(id);
}
...
}
Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884
Suscribirse a:
Entradas (Atom)