Correccion - Entrega 2 - Grupo 8

Antes que nada, la entrega esta APROBADA.

Muy buenos los tests de integración, creo que quedó claro el tema de los mapeos y como testear la integridad de los datos y que al utilizar el sistema las consultas no rompan nada.

Les paso algunas cositas que vi.

- Algunas clases como BaseDatos no tienen Javadoc :-(

Al ser LA clase que maneja la sesión y tantos métodos referidos a la base, estaría bueno que estuviera mejor descripta.

- El método BaseDatos.getCantidadTablaSQL es MUY antiperformante.

Es mejor que traer objetos con HQL porque se inflan y pesan más, pero es mucho peor que un count que se corre del lado de la base. Imagínense que pasa si tengo un millón de registros.. estoy trayéndome un montón de información que no necesito y que después de hacer el size() la voy a tirar.

- El método BaseDatos.getCantidadEnBD es realmente feo, este a diferencia del anterior si infla los objetos, y puede voltear un sistema si los objetos son muchos. De vuelta, esto se DEBE resolver del lado de la base

Acá va el modo feliz:

public int getCantidadEnBD(String nombreClase) {

Session session = BaseDatos.getInstance().getSession();

Transaction transaccion = session.beginTransaction();

Query query = session.createQuery("select count(c) from " + nombreClase + " c");

//uniqueResult porque estoy seguro que es solo un valor

int retVal = ((Long) query.uniqueResult()).intValue();

transaccion.commit();

session.close();

return retVal;

}

- El javadoc de usuario habla de hacer

usuario.setEstrategia(new <Tipo de Estrategia>);

sin embargo lo usan de otra forma:

u2.setEstrategia(StrategyAmigos.Siempre);

guarda con esto

- Está buena la solución del strategy stateless como enum para persistir la estrategia de aceptar amigos.

No es de lo más feliz, pero funciona bien y si algún día se cambia, es probable que lo haga la misma persona que desarrollo, por ende no molesta tanto tener que recompilar, etc.

- Anecdótico: el método Interesection que devuelve una colección compuesta por la intersección de otras 2, esta en CollectionUtils. Igual esta bien resuelto con addAll y retainAll.

- Bien usado el MappedBy en usuarios / grupos

- En el test testVerificarIntegridadObjetos están asumiendo que una query devuelve los usuarios en cierto orden. Esto funciona, pero no tiene porque ser así, ojo con eso.

- No termino de entender como manejaron el tema de los usuarios potenciales, después cuentenme por mail una pequeña descripción de que hicieron con este requerimiento.