99 lines
3.3 KiB
Markdown
99 lines
3.3 KiB
Markdown
#Cosas que quiero arreglar, pero no podre :c
|
|
|
|
## Validaciones
|
|
|
|
Las validaciones encuentro que me quedaron bien, sin embargo creo que pueden ser mucho mejor,
|
|
el problema es que no encontre ninguna libreria que no trabaje con web o con objetos ya creados.
|
|
|
|
Mi idea de una buena libreria de validaciones es algo similar a la que utiliza laravel,
|
|
se pasa un objeto y una serie de reglas a aplicar a ese objeto, si alguna de las reglas falla, la
|
|
validacion completa fallara.
|
|
|
|
Estuve jugando un poco con la idea de hacer algo similar, pero no logre hacer que las reglas fueran
|
|
universales, para poder arreglar esto puede que me hubiese tomado mucho tiempo asi que decidi volver a
|
|
como estan en este momento.
|
|
|
|
Basicamente mi idea de una validacion tendria que tener un codigo como este:
|
|
|
|
```
|
|
Validation validacion = new Validation(
|
|
object.getA() => List.of(Rule.notNull(), Rule.string(), Rule.minLength(5)),
|
|
object.getB() => List.of(Rule.date)
|
|
).validate();
|
|
|
|
if(validation.hasError()) {
|
|
validation.showErrorDialog();
|
|
return;
|
|
}
|
|
```
|
|
|
|
Sin embargo no sabria como hacer un map al momento de inicializar un objeto (porque el => no existe en java),
|
|
podria crearlo y poblarlo antes, pero no quiero escribir tanto codigo y siento que quedaria sucio
|
|
dentro de un controlador.
|
|
|
|
# BaseTableModel
|
|
|
|
Me gusta esa parte de mi codigo, me deja bastante facil el crear un tabla bonita a la que solo le paso
|
|
un objeto y con las reglas que le asigno al inicializar los muestra correctamente, me ahorro el estar
|
|
transformando a strings en el controlador y cosas asi.
|
|
|
|
Sin embargo creo que podria ser mas limpio
|
|
|
|
```
|
|
this.model = new BaseTableModel<>(
|
|
new String[]{"Distribuidor", "Nº Libros", "Estado", "Fecha Emision"},
|
|
(row, rowIndex, colIndex) -> {
|
|
switch (colIndex) {
|
|
case 0:
|
|
return row.get(rowIndex).getDistribuidor().getRut();
|
|
case 1:
|
|
return row.get(rowIndex).getLibros().size();
|
|
case 2:
|
|
return row.get(rowIndex).getEstado();
|
|
case 3:
|
|
return row.get(rowIndex).getInsertedAt();
|
|
default:
|
|
return null;
|
|
}
|
|
}
|
|
);
|
|
```
|
|
|
|
Como se ve, cada vez tengo que obtener el objeto y luego obtener la parte que quiero mostrar.
|
|
Seguramente es facil dejarlo mas bonito, pero tendria que cambiar todas las vistas que usan una tabla,
|
|
me tomaria un rato quizas un poco largo y no quiero perderlo.
|
|
|
|
## LaunchController
|
|
|
|
Me gusta como queda, pero siento que igual se podria hacer algo mejor.
|
|
|
|
Seria perfecto que cada vista se pudiera autoinsertar de alguna forma en ese controlador, en vez de estar
|
|
llamando a cada una y creandola manualmente
|
|
|
|
Quizas puede hacerse de alguna forma con funciones estaticas? o alguna especie de singleton? como todos
|
|
los controladores existen solo una vez dentro de la aplicacion quizas es viable
|
|
Cosa que se pueda hacer lo siguiente
|
|
|
|
```
|
|
class Controller {
|
|
private View view;
|
|
|
|
// Constructor estatico
|
|
{
|
|
LaunchController.add(new Controller(new View()));
|
|
}
|
|
|
|
public Controller(View view) {
|
|
this.view = view;
|
|
}
|
|
|
|
public void goToView2() {
|
|
LaunchController.show(PanelName.View2);
|
|
}
|
|
}
|
|
```
|
|
|
|
No estoy seguro si seria viable, pero pareciera ser una buena solucion, ahora no la puedo implementar porque
|
|
significaria crear toda la arquitectura de la app desde cero.
|
|
|
|
No hay tiempo :c |