1 00:00:03,250 --> 00:00:20,489 Vale, solamente le importan a él, por eso son privadas, que son el fichero de datos con el que va a trabajar, información interna suya, y el map en el que va a volcar los datos para trabajar de forma óptima con la RAM, teniéndolo todo ahí en la RAM. 2 00:00:20,489 --> 00:00:22,230 entonces solo le importa a él, son privadas 3 00:00:22,230 --> 00:00:24,190 y es que aquí no tiene sentido hacer 4 00:00:24,190 --> 00:00:26,469 ni get ni set, esto no es una entidad 5 00:00:26,469 --> 00:00:28,429 que refleje algo con lo que 6 00:00:28,429 --> 00:00:30,329 va a trabajar mi aplicación, una factura 7 00:00:30,329 --> 00:00:31,410 entonces 8 00:00:31,410 --> 00:00:34,350 estas propiedades las van a usar estos métodos 9 00:00:34,350 --> 00:00:35,369 solamente 10 00:00:35,369 --> 00:00:38,189 pues entonces aquí estos métodos 11 00:00:38,189 --> 00:00:40,009 ya accederán a estas dos propiedades 12 00:00:40,009 --> 00:00:42,310 no hay que exponerlas para afuera 13 00:00:42,310 --> 00:00:46,289 no hay necesidad 14 00:00:46,289 --> 00:00:47,609 bueno, entonces reserva dado 15 00:00:47,609 --> 00:00:48,950 el constructor 16 00:00:48,950 --> 00:00:51,530 el constructor necesita 17 00:00:51,530 --> 00:00:53,770 que la aplicación que use este 18 00:00:53,770 --> 00:00:55,929 le diga el fichero concreto 19 00:00:55,929 --> 00:00:57,250 el fichero concreto 20 00:00:57,250 --> 00:00:59,570 dime el fichero concreto que quieres 21 00:00:59,570 --> 00:01:01,850 porque cada main usará un fichero 22 00:01:01,850 --> 00:01:03,770 distinto, cada aplicación 23 00:01:03,770 --> 00:01:04,950 usará un fichero distinto 24 00:01:04,950 --> 00:01:07,510 entonces dime el fichero concreto que tienes 25 00:01:07,510 --> 00:01:09,310 pásamelo por constructor 26 00:01:09,310 --> 00:01:11,769 que es la manera de pasarles 27 00:01:11,769 --> 00:01:13,989 las propiedades a las entidades 28 00:01:13,989 --> 00:01:16,109 por constructor, pásamela por constructor 29 00:01:16,109 --> 00:01:17,930 y yo ya 30 00:01:17,930 --> 00:01:19,609 aparte de inicializar 31 00:01:19,609 --> 00:01:22,150 mi file, aparte de inicializarlo 32 00:01:22,150 --> 00:01:23,209 con este que me has pasado 33 00:01:23,209 --> 00:01:26,170 ya aprovecho y vuelco 34 00:01:26,170 --> 00:01:28,030 el contenido de ese fichero en mi map 35 00:01:28,030 --> 00:01:29,930 para que ahora ya 36 00:01:29,930 --> 00:01:32,030 todos los métodos trabajen con 37 00:01:32,030 --> 00:01:34,310 ese map directamente, aprovecho y lo vuelco 38 00:01:34,310 --> 00:01:35,849 entonces como lo vuelco 39 00:01:35,849 --> 00:01:38,049 pues como hemos hecho hasta ahora, un bucle de lectura 40 00:01:38,049 --> 00:01:40,109 en el file, si el fichero 41 00:01:40,109 --> 00:01:41,010 no existiera 42 00:01:41,010 --> 00:01:44,290 o si existiendo estuviera limpio 43 00:01:44,290 --> 00:01:44,829 o vacío 44 00:01:44,829 --> 00:01:47,689 si no existiera 45 00:01:47,689 --> 00:01:49,650 o estuviera limpio y vacío 46 00:01:49,650 --> 00:01:51,590 importante aquí 47 00:01:51,590 --> 00:01:53,810 las dos barras y no solo una 48 00:01:53,810 --> 00:01:56,209 aquí cambiaría la cosa horriblemente 49 00:01:56,209 --> 00:01:57,790 ¿no? pues si pongo una 50 00:01:57,790 --> 00:01:59,750 barra, esta cláusula se ejecutaría 51 00:01:59,750 --> 00:02:01,730 sí o sí y aquí me 52 00:02:01,730 --> 00:02:03,090 daría un null pointer exception 53 00:02:03,090 --> 00:02:05,590 si el fichero no existe 54 00:02:05,590 --> 00:02:06,510 pues podría ser null 55 00:02:06,510 --> 00:02:07,989 entonces 56 00:02:07,989 --> 00:02:11,789 vale, pues si el fichero no existe 57 00:02:11,789 --> 00:02:13,009 o existiendo 58 00:02:13,009 --> 00:02:14,889 su tamaño es cero 59 00:02:14,889 --> 00:02:17,770 pues entonces créate un map 60 00:02:17,770 --> 00:02:19,750 nuevo limpio, porque no tengo todavía 61 00:02:19,750 --> 00:02:21,370 ninguna reserva, un map limpio 62 00:02:21,370 --> 00:02:23,789 y en el else, es decir 63 00:02:23,789 --> 00:02:25,610 si sí que existe y tiene datos 64 00:02:25,610 --> 00:02:27,650 pues hará ya el bucle de lectura 65 00:02:27,650 --> 00:02:29,569 de toda la vida, asociamos un 66 00:02:29,569 --> 00:02:31,210 file input string a ese fichero 67 00:02:31,210 --> 00:02:33,389 del que vamos a leer 68 00:02:33,389 --> 00:02:35,710 y ahora ya vamos leyendo reserva 69 00:02:35,710 --> 00:02:37,490 por reserva y cada 70 00:02:37,490 --> 00:02:38,750 reserva se va a mi map 71 00:02:38,750 --> 00:02:41,629 con su código extraído 72 00:02:41,629 --> 00:02:43,689 fuera y su 73 00:02:43,689 --> 00:02:45,009 Objeto reserva enterito. 74 00:02:45,129 --> 00:02:45,770 Su valor aquí. 75 00:02:46,650 --> 00:02:47,229 Y ya está. 76 00:02:49,620 --> 00:02:49,939 ¿Vale? 77 00:02:50,080 --> 00:02:51,759 Si optáramos por la opción. 78 00:02:51,939 --> 00:02:53,800 Que también es posible. 79 00:02:54,039 --> 00:02:54,159 De. 80 00:02:54,379 --> 00:02:54,539 Oye. 81 00:02:55,060 --> 00:02:55,879 Como este dado. 82 00:02:56,620 --> 00:02:57,060 Reserva. 83 00:02:57,800 --> 00:02:59,759 Por dentro hace lo que le da la gana. 84 00:03:00,280 --> 00:03:02,979 Y lo tiene todo ahí oculto y encapsulado. 85 00:03:03,099 --> 00:03:03,819 A la aplicación. 86 00:03:03,819 --> 00:03:05,740 Lo único que le importa es hacer un insert. 87 00:03:06,259 --> 00:03:07,740 Hacer un delete. 88 00:03:07,919 --> 00:03:08,659 Lo único que le importa. 89 00:03:09,159 --> 00:03:10,620 Pues como este puede hacer lo que le da la gana. 90 00:03:10,780 --> 00:03:11,800 Podría haber optado por. 91 00:03:12,419 --> 00:03:12,719 Oye. 92 00:03:13,719 --> 00:03:14,360 Este map. 93 00:03:14,360 --> 00:03:16,099 cuando yo lo tenga que guardar en el fichero 94 00:03:16,099 --> 00:03:18,120 para actualizarlo, en lugar de ir 95 00:03:18,120 --> 00:03:19,599 reserva por reserva 96 00:03:19,599 --> 00:03:22,099 lo voy a guardar entero, write object 97 00:03:22,099 --> 00:03:24,280 el map enterito, porque no deja de ser un objeto 98 00:03:24,280 --> 00:03:25,020 también el map 99 00:03:25,020 --> 00:03:28,360 ¿vale? pues entonces si hubiera optado por eso 100 00:03:28,360 --> 00:03:29,879 no me haría falta 101 00:03:29,879 --> 00:03:31,120 ni bucle de lectura 102 00:03:31,120 --> 00:03:34,280 porque podría haber 103 00:03:34,280 --> 00:03:35,240 hecho esta sentencia 104 00:03:35,240 --> 00:03:37,800 mi objeto 105 00:03:37,800 --> 00:03:39,719 reservas, le me 106 00:03:39,719 --> 00:03:42,180 el único objeto que haya en el fichero 107 00:03:42,180 --> 00:03:43,659 que es el map enterito 108 00:03:43,659 --> 00:03:45,379 Que es el map enterito 109 00:03:45,379 --> 00:03:47,400 Dime 110 00:03:47,400 --> 00:03:49,340 Mira, yo lo hice así 111 00:03:49,340 --> 00:03:52,780 Pero en otro método 112 00:03:52,780 --> 00:03:54,180 Hice que lo leyera uno a uno 113 00:03:54,180 --> 00:03:55,280 Porque en el de abajo 114 00:03:55,280 --> 00:03:56,300 Entonces no puedes 115 00:03:56,300 --> 00:03:58,979 Claro, las cabeceras 116 00:03:58,979 --> 00:04:00,740 Una cosa es la cabecera que te dice 117 00:04:00,740 --> 00:04:01,840 Aquí hay un map, bla, bla, bla 118 00:04:01,840 --> 00:04:03,680 Y otra cosa es la cabecera que te dice 119 00:04:03,680 --> 00:04:05,000 Aquí hay una lista de reservas 120 00:04:05,000 --> 00:04:06,740 No tiene nada que ver un fichero con el otro 121 00:04:06,740 --> 00:04:07,620 No puedes mezclar 122 00:04:07,620 --> 00:04:10,240 Vale, bueno, pues entonces 123 00:04:10,240 --> 00:04:13,560 El constructor te inicializa el map 124 00:04:13,560 --> 00:04:15,000 Con un map vacío 125 00:04:15,000 --> 00:04:17,300 o con un map con todas 126 00:04:17,300 --> 00:04:19,319 las reservas. Y ya está. Eso hace 127 00:04:19,319 --> 00:04:21,420 el constructor. Y ahora ya los métodos 128 00:04:21,420 --> 00:04:22,480 se quedan más sencillos. 129 00:04:23,459 --> 00:04:24,339 Recuperar todos. 130 00:04:27,899 --> 00:04:29,600 Otra vez no. La primera, pero no la he enseñado 131 00:04:29,600 --> 00:04:30,560 nunca. Este es el constructor. 132 00:04:31,959 --> 00:04:33,060 O sea, vamos uno por uno. 133 00:04:33,680 --> 00:04:34,439 El find all. 134 00:04:36,279 --> 00:04:37,560 ¿El constructor quieres? 135 00:04:38,939 --> 00:04:39,500 Es que creía 136 00:04:39,500 --> 00:04:41,279 que me estabas diciendo el insert, que te estabas adelantando. 137 00:04:41,899 --> 00:04:43,519 ¿Qué parte del constructor quieres? 138 00:04:43,560 --> 00:04:53,879 para meterlo en el map 139 00:04:53,879 --> 00:04:56,600 el objeto reserva que voy leyendo 140 00:04:56,600 --> 00:04:57,759 voy de uno en uno 141 00:04:57,759 --> 00:05:00,160 claro, porque aquí 142 00:05:00,160 --> 00:05:01,800 para probar tengo las dos opciones 143 00:05:01,800 --> 00:05:04,060 esta es una de las dos 144 00:05:04,060 --> 00:05:04,860 vale 145 00:05:04,860 --> 00:05:08,779 entonces, recuperar 146 00:05:08,779 --> 00:05:10,459 bueno, este es el más fácil 147 00:05:10,459 --> 00:05:12,660 si quiero que me devuelva 148 00:05:12,660 --> 00:05:14,759 una lista, pues 149 00:05:14,759 --> 00:05:16,100 me construyo una lista 150 00:05:16,100 --> 00:05:18,939 nueva, limpia, independiente 151 00:05:18,939 --> 00:05:20,920 y a esa lista le voy 152 00:05:20,920 --> 00:05:22,879 metiendo todas 153 00:05:22,879 --> 00:05:23,819 las reservas. 154 00:05:25,199 --> 00:05:25,240 ¿Vale? 155 00:05:26,720 --> 00:05:28,819 Entonces, el método values, pues ya 156 00:05:28,819 --> 00:05:30,860 sabemos que nos da una colección con 157 00:05:30,860 --> 00:05:32,259 todas las reservas, pero 158 00:05:32,259 --> 00:05:34,620 cuidado porque 159 00:05:34,620 --> 00:05:36,819 hay que ver bien que hacen los métodos. 160 00:05:37,240 --> 00:05:38,779 Entonces, igual que el entry set era 161 00:05:38,779 --> 00:05:40,180 una vista del map entero, 162 00:05:40,180 --> 00:05:43,819 values es una vista, entonces tiene esas particularidades 163 00:05:43,819 --> 00:05:45,879 no es una lista normal y corriente 164 00:05:45,879 --> 00:05:49,360 entonces yo quiero devolver una lista normal y corriente 165 00:05:49,360 --> 00:05:52,699 perfectamente modificable, lo que haga falta 166 00:05:52,699 --> 00:05:54,639 y no asociada a ningún map 167 00:05:54,639 --> 00:05:57,939 values va a ser una vista que está asociada al map 168 00:05:57,939 --> 00:06:01,519 si el map cambia, cambia values, entonces devolver esto directamente 169 00:06:01,519 --> 00:06:03,899 no quiero, me voy a construir una lista 170 00:06:03,899 --> 00:06:07,180 nueva, limpita, a la que le voy añadiendo 171 00:06:07,180 --> 00:06:10,019 todos los objetos reserva y ya está 172 00:06:10,019 --> 00:06:13,500 vale, pues final, lo habréis hecho como lo hayáis hecho 173 00:06:13,500 --> 00:06:16,639 hay muchas opciones, pero en esencia es esto 174 00:06:16,639 --> 00:06:20,259 ahora el insert, pues nada, el insert yo lo que he hecho es 175 00:06:20,259 --> 00:06:23,220 verificar si la clave ya está 176 00:06:23,220 --> 00:06:26,740 porque si la clave ya está, aviso con el false 177 00:06:26,740 --> 00:06:28,160 de que no he podido hacer la inserción 178 00:06:28,160 --> 00:06:34,360 y si la clave no estuviera, entonces ahora ya 179 00:06:34,360 --> 00:06:36,980 hago el insert y mi insert es hacer un put 180 00:06:36,980 --> 00:06:39,459 y ya está, mi insert es el put 181 00:06:39,459 --> 00:06:42,199 Pero claro, no se me puede olvidar 182 00:06:42,199 --> 00:06:44,759 Después del insert, actualizar el fichero 183 00:06:44,759 --> 00:06:46,560 Después del insert 184 00:06:46,560 --> 00:06:48,240 No se puede olvidar actualizarlo 185 00:06:48,240 --> 00:06:50,980 Y para eso tengo este método auxiliar 186 00:06:50,980 --> 00:06:54,579 Que lo único que hace es escribirlo en el fichero 187 00:06:54,579 --> 00:06:55,259 ¿Vale? 188 00:06:57,740 --> 00:07:09,279 Es una posibilidad 189 00:07:09,279 --> 00:07:10,180 Hay más opciones 190 00:07:10,180 --> 00:07:12,720 Reserva.getcode.reserva 191 00:07:12,720 --> 00:07:14,639 El put 192 00:07:14,639 --> 00:07:16,920 Te devuelve algo 193 00:07:16,920 --> 00:07:18,100 Que lo puedes usar 194 00:07:18,100 --> 00:07:39,250 Sí, pero quiero ver el valor de retorno 195 00:07:39,250 --> 00:07:41,949 De previous value asociado con esta clave 196 00:07:41,949 --> 00:07:42,930 Por null, vale 197 00:07:42,930 --> 00:07:45,990 Entonces, podríamos usar directamente 198 00:07:45,990 --> 00:07:47,629 Aquí en el if, if reservas 199 00:07:47,629 --> 00:07:49,029 Put igual a null 200 00:07:49,029 --> 00:07:51,709 Pues entonces, ahí es porque 201 00:07:51,709 --> 00:07:53,170 Se ha hecho la inserción efectiva 202 00:07:53,170 --> 00:07:55,250 Y así no tengo que poner este 203 00:07:55,250 --> 00:07:57,189 Hay diferentes formas, ¿no? 204 00:07:57,649 --> 00:07:59,449 O sea, porque si este te devuelve null 205 00:07:59,449 --> 00:08:00,870 Es porque la inserción se hizo 206 00:08:00,870 --> 00:08:03,310 se hizo de forma efectiva, si no es que ya había 207 00:08:03,310 --> 00:08:05,569 uno de antes y lo está sobre escribiendo 208 00:08:05,569 --> 00:08:07,629 entonces como lo queráis hacer 209 00:08:07,629 --> 00:08:09,649 puedo quitar esto de arriba 210 00:08:09,649 --> 00:08:10,810 y meter esto en el if 211 00:08:10,810 --> 00:08:12,610 si esto es igual a null 212 00:08:12,610 --> 00:08:15,290 entonces returbo o no, no, no, no haría eso 213 00:08:15,290 --> 00:08:16,769 porque entonces estaría modificando el otro 214 00:08:16,769 --> 00:08:18,170 así lo dejaría 215 00:08:18,170 --> 00:08:20,889 verifico 216 00:08:20,889 --> 00:08:22,069 que 217 00:08:22,069 --> 00:08:25,529 a ver si lo contiene, porque si ya lo contiene 218 00:08:25,529 --> 00:08:27,149 aviso con el false de que 219 00:08:27,149 --> 00:08:28,889 no, la inserción mal, ya estaba 220 00:08:28,889 --> 00:08:31,149 no lo puedo insertar, ya estaba 221 00:08:31,149 --> 00:08:33,389 si no he salido con el retún 222 00:08:33,389 --> 00:08:35,250 falso, pues lo inserto 223 00:08:35,250 --> 00:08:36,309 ya de forma efectiva 224 00:08:36,309 --> 00:08:38,889 y actualizo el fichero 225 00:08:38,889 --> 00:08:41,210 porque se ha visto modificado el map 226 00:08:41,210 --> 00:08:43,250 entonces el persist este de aquí 227 00:08:43,250 --> 00:08:44,909 es un método auxiliar dentro del DAO 228 00:08:44,909 --> 00:08:46,289 que ojo 229 00:08:46,289 --> 00:08:49,429 porque aquí yo me he encontrado 230 00:08:49,429 --> 00:08:51,049 un error en la ejecución 231 00:08:51,049 --> 00:08:52,929 pues uno va escribiendo así 232 00:08:52,929 --> 00:08:55,049 y efectivamente mi primera 233 00:08:55,049 --> 00:08:57,210 versión tenía esto que está aquí comentado 234 00:08:57,210 --> 00:08:58,610 que era 235 00:08:58,610 --> 00:09:00,370 Pues me hago esto para escribir 236 00:09:00,370 --> 00:09:03,230 No para añadir 237 00:09:03,230 --> 00:09:05,070 Porque lo voy a escribir siempre de nuevas 238 00:09:05,070 --> 00:09:06,409 O sea, aquí no hay un true 239 00:09:06,409 --> 00:09:08,649 Porque voy a escribir el map 240 00:09:08,649 --> 00:09:10,929 Enterito con todas sus reservas 241 00:09:10,929 --> 00:09:12,389 Y ahora yo 242 00:09:12,389 --> 00:09:14,309 Esta era mi primera versión 243 00:09:14,309 --> 00:09:21,070 Esta 244 00:09:21,070 --> 00:09:23,330 ¿Vale? Mi primera versión 245 00:09:23,330 --> 00:09:24,470 En la que yo hacía 246 00:09:24,470 --> 00:09:25,289 Y ahora me voy 247 00:09:25,289 --> 00:09:27,629 Reserva por reserva 248 00:09:27,629 --> 00:09:30,029 Dentro de todos los valores del map 249 00:09:30,029 --> 00:09:32,309 Y escribía la reserva 250 00:09:32,309 --> 00:09:33,570 ¿Vale? Muy bien 251 00:09:33,570 --> 00:09:35,590 pero luego cuando intentaba recuperar 252 00:09:35,590 --> 00:09:37,690 y hacía el casting a reserva 253 00:09:37,690 --> 00:09:38,649 de lo que veía en el fichero 254 00:09:38,649 --> 00:09:41,610 me decía, uy, el casting no, este no casting 255 00:09:41,610 --> 00:09:43,509 no me cuadra, claro, cuidado 256 00:09:43,509 --> 00:09:45,190 porque values 257 00:09:45,190 --> 00:09:47,629 de nuevo, al obtenérmelo como 258 00:09:47,629 --> 00:09:49,850 vista, tiene unas marcas 259 00:09:49,850 --> 00:09:51,629 internas y no 260 00:09:51,629 --> 00:09:53,649 se va a guardar como un objeto reserva limpio 261 00:09:53,649 --> 00:09:55,570 porque es una vista, entonces tiene unas marcas 262 00:09:55,570 --> 00:09:56,809 internas, entonces cuidado 263 00:09:56,809 --> 00:09:59,309 con este método, cuando tú quieres una vista 264 00:09:59,309 --> 00:10:01,450 para ver lo que hay en el map, bien, pero cuando 265 00:10:01,450 --> 00:10:03,289 luego quieres esos objetos para hacer 266 00:10:03,289 --> 00:10:05,309 otras cosas, pues no lo saques 267 00:10:05,309 --> 00:10:07,470 con values, porque luego al hacer el casting 268 00:10:07,470 --> 00:10:09,450 a reserva, entonces 269 00:10:09,450 --> 00:10:13,309 esto lo he quitado, lógicamente 270 00:10:13,309 --> 00:10:15,149 y he dejado esto 271 00:10:15,149 --> 00:10:16,690 y esto ya no tiene problemas 272 00:10:16,690 --> 00:10:19,090 ¿vale? 273 00:10:20,450 --> 00:10:22,669 ¿qué he hecho? pues ahora ya sí que me he 274 00:10:22,669 --> 00:10:24,590 sacado la reserva enterita, no la vista 275 00:10:24,590 --> 00:10:26,149 la reserva entera 276 00:10:26,149 --> 00:10:28,129 me he sacado todas las claves 277 00:10:28,129 --> 00:10:30,610 con el keyset todas las claves y ahora me he ido clave 278 00:10:30,610 --> 00:10:32,529 por clave, y para cada clave 279 00:10:32,529 --> 00:10:34,649 me he escrito la reserva asociada 280 00:10:34,649 --> 00:10:36,549 a esa clave. Y este ya sí que es 281 00:10:36,549 --> 00:10:38,490 el objeto reserva tal cual, el que está 282 00:10:38,490 --> 00:10:40,570 en el map. El objeto reserva que está en el 283 00:10:40,570 --> 00:10:42,730 map. Ni una vista asociada 284 00:10:42,730 --> 00:10:44,570 ni nada. El objeto reserva que está en el 285 00:10:44,570 --> 00:10:46,450 map. ¿Vale? Pues mi persiste 286 00:10:46,450 --> 00:10:48,509 tiene solamente eso. Se hace 287 00:10:48,509 --> 00:10:49,409 el output string 288 00:10:49,409 --> 00:10:52,830 y escribe todas las reservas. 289 00:10:53,750 --> 00:10:54,629 Que quiero la opción 290 00:10:54,629 --> 00:10:56,549 dos, de guardar el map enterito 291 00:10:56,549 --> 00:10:58,470 que es la más cómoda. Todo 292 00:10:58,470 --> 00:11:00,370 este bucle, todo esto de aquí 293 00:11:00,370 --> 00:11:02,070 se sustituiría por esta línea. 294 00:11:02,529 --> 00:11:03,049 De aquí abajo. 295 00:11:04,149 --> 00:11:06,409 Escribo el map entero y listo. 296 00:11:08,029 --> 00:11:08,250 ¿Vale? 297 00:11:08,330 --> 00:11:09,909 Todo esto de aquí 298 00:11:09,909 --> 00:11:12,330 se sustituiría por esto. 299 00:11:12,870 --> 00:11:14,250 Escribo el map y se acabó. 300 00:11:15,450 --> 00:11:15,809 ¿Vale? 301 00:11:16,909 --> 00:11:18,769 Depende de la opción que haya adoptado. 302 00:11:21,570 --> 00:11:22,629 Hombre, más cómoda 303 00:11:22,629 --> 00:11:23,669 esta, lógicamente. 304 00:11:24,090 --> 00:11:26,429 Si tú no necesitas en el fichero 305 00:11:26,429 --> 00:11:28,490 porque nadie más lo va a usar, que las reservas estén 306 00:11:28,490 --> 00:11:30,629 por separado, pues guardas 307 00:11:30,629 --> 00:11:32,289 el map entero y ya está. Otra cosa es que 308 00:11:32,289 --> 00:11:34,490 Luego en esta aplicación tú quisieras 309 00:11:34,490 --> 00:11:36,490 Acceder a reservas 310 00:11:36,490 --> 00:11:38,730 Sueltas a la reserva 311 00:11:38,730 --> 00:11:40,769 Directamente en el fichero 312 00:11:40,769 --> 00:11:42,309 Entonces pues a lo mejor interesa 313 00:11:42,309 --> 00:11:43,070 Tenerlas así 314 00:11:43,070 --> 00:11:46,070 Pero en este caso 315 00:11:46,070 --> 00:11:48,049 Mucho más cómodo guardar el mapa enterito 316 00:11:48,049 --> 00:11:50,370 Vale, pues el insert 317 00:11:50,370 --> 00:11:52,110 Ese de ahí 318 00:11:52,110 --> 00:11:54,289 Borrar 319 00:11:54,289 --> 00:11:56,210 Pues borrar he hecho lo mismo 320 00:11:56,210 --> 00:11:57,409 Primero he verificado 321 00:11:57,409 --> 00:12:00,429 Que a ver si existe o no existe 322 00:12:00,429 --> 00:12:01,789 Porque si no existe 323 00:12:01,789 --> 00:12:05,009 Aviso con false de que no se ha podido borrar 324 00:12:05,009 --> 00:12:07,110 Aviso con false de que no se ha podido borrar 325 00:12:07,110 --> 00:12:07,529 Y ya está 326 00:12:07,529 --> 00:12:10,370 Todo esto, lógicamente, esta aplicación 327 00:12:10,370 --> 00:12:12,909 Aunque ya se parece más a una real 328 00:12:12,909 --> 00:12:14,789 Porque está ya desacoplada 329 00:12:14,789 --> 00:12:16,850 Tiene la parte de datos, la parte de no sé qué 330 00:12:16,850 --> 00:12:18,769 Le falta una cosa fundamental 331 00:12:18,769 --> 00:12:20,889 Que es comentarla 332 00:12:20,889 --> 00:12:22,049 Y decir 333 00:12:22,049 --> 00:12:24,889 Devuelve false si no se pudo borrar 334 00:12:24,889 --> 00:12:27,149 True si sí se borró 335 00:12:27,149 --> 00:12:28,090 Patatín 336 00:12:28,090 --> 00:12:30,590 Claro, le falta eso, lo básico 337 00:12:30,590 --> 00:12:32,690 Explicar los valores de retorno 338 00:12:32,690 --> 00:12:34,110 Que significan todo eso 339 00:12:34,110 --> 00:12:37,029 Le faltarían esos comentarios 340 00:12:37,029 --> 00:12:38,990 Pero bueno 341 00:12:38,990 --> 00:12:40,769 A no extendernos demasiado 342 00:12:40,769 --> 00:12:42,129 Vale, pues delete 343 00:12:42,129 --> 00:12:44,970 Me devuelve falso si el código no existe 344 00:12:44,970 --> 00:12:47,149 Así el método que lo llama puede decir 345 00:12:47,149 --> 00:12:48,990 Oye, no existe el registro, no lo puedo borrar 346 00:12:48,990 --> 00:12:53,350 Y si sí que existe, pues lo borra con remove y se acabó 347 00:12:53,350 --> 00:12:54,870 Y vuelve a actualizar el archivo 348 00:12:54,870 --> 00:12:55,850 Resiste 349 00:12:55,850 --> 00:12:59,600 El get, pues el más fácil 350 00:12:59,600 --> 00:13:02,039 Me recupera directamente con el código de reserva 351 00:13:02,039 --> 00:13:04,080 ya está, me devolverá null si no está 352 00:13:04,080 --> 00:13:05,919 el get es el más sencillo, una línea 353 00:13:05,919 --> 00:13:07,960 y el update 354 00:13:07,960 --> 00:13:09,980 pues prácticamente igual que el delete 355 00:13:09,980 --> 00:13:11,440 si no existe 356 00:13:11,440 --> 00:13:13,360 me avisa con false 357 00:13:13,360 --> 00:13:15,600 para que el programa principal pueda decir 358 00:13:15,600 --> 00:13:17,799 oye, no existe el que quieres actualizar 359 00:13:17,799 --> 00:13:18,779 lo siento, no existe 360 00:13:18,779 --> 00:13:21,799 pero si existe 361 00:13:21,799 --> 00:13:24,019 ahora ya lo reemplaza 362 00:13:24,019 --> 00:13:25,679 reemplaza 363 00:13:25,679 --> 00:13:26,919 el que tenga ese código 364 00:13:26,919 --> 00:13:29,000 con 365 00:13:29,000 --> 00:13:31,000 el nuevo que me han pasado 366 00:13:31,000 --> 00:13:33,860 y ya estarían todos los métodos 367 00:13:33,860 --> 00:13:34,759 de acceso a datos 368 00:13:34,759 --> 00:13:37,279 entonces esto está 369 00:13:37,279 --> 00:13:39,980 ocultando, encapsulando toda la complejidad 370 00:13:39,980 --> 00:13:40,940 de acceso al fichero 371 00:13:40,940 --> 00:13:42,360 te dice 372 00:13:42,360 --> 00:13:46,179 tú llámame a mí diciendo insert, get, delete 373 00:13:46,179 --> 00:13:47,580 update o find all 374 00:13:47,580 --> 00:13:49,960 y yo te hago toda la mierdecilla 375 00:13:49,960 --> 00:13:50,679 que tenga que hacer 376 00:13:50,679 --> 00:13:53,840 tú sabes que cada vez que llames a alguno de esos métodos 377 00:13:53,840 --> 00:13:55,740 el fichero se va a quedar completamente 378 00:13:55,740 --> 00:13:56,480 actualizado 379 00:13:56,480 --> 00:13:59,919 yo ya me ocupo con todas las mierdecillas que hago por dentro 380 00:13:59,919 --> 00:14:00,840 de que eso sea así 381 00:14:00,840 --> 00:14:03,539 vale, pues ahora ya el main 382 00:14:03,539 --> 00:14:04,240 ya lo usa 383 00:14:04,240 --> 00:14:06,419 y el main ya 384 00:14:06,419 --> 00:14:09,659 usará el reserva dado 385 00:14:09,659 --> 00:14:11,720 vale 386 00:14:11,720 --> 00:14:15,399 usará el reserva dado 387 00:14:15,399 --> 00:14:16,960 vale 388 00:14:16,960 --> 00:14:18,980 entonces el reserva dado 389 00:14:18,980 --> 00:14:21,440 de nuevo hay que pasarle el fichero 390 00:14:21,440 --> 00:14:22,720 lógicamente 391 00:14:22,720 --> 00:14:25,379 en mi caso datos reserva 392 00:14:25,379 --> 00:14:27,059 y el reserva dado 393 00:14:27,059 --> 00:14:28,659 sí que puede lanzar una excepción 394 00:14:28,659 --> 00:14:30,899 sí que puede lanzarlo 395 00:14:30,899 --> 00:14:32,460 porque mi constructor 396 00:14:32,460 --> 00:14:34,799 como mi constructor leía 397 00:14:34,799 --> 00:14:37,000 del fichero, el constructor sí que puede lanzar 398 00:14:37,000 --> 00:14:37,620 una excepción 399 00:14:37,620 --> 00:14:41,220 pues aquí ya en el main, cuando lo instancio 400 00:14:41,220 --> 00:14:42,059 cuando hago el new 401 00:14:42,059 --> 00:14:44,360 tengo que capturar la excepción 402 00:14:44,360 --> 00:14:46,019 porque el constructor 403 00:14:46,019 --> 00:14:48,399 de reserva dado es mucho más complicado 404 00:14:48,399 --> 00:14:49,399 que el de destino dado 405 00:14:49,399 --> 00:14:52,039 el constructor de reserva dado me hace 406 00:14:52,039 --> 00:14:53,279 todo esto de aquí 407 00:14:53,279 --> 00:14:56,080 me hace todo esto 408 00:14:56,080 --> 00:14:58,139 todo esto que es un rollo 409 00:14:58,139 --> 00:15:00,259 y puede lanzar excepción, puede lanzarla 410 00:15:00,259 --> 00:15:02,039 pues entonces en el main 411 00:15:02,039 --> 00:15:04,299 para instanciar el reservadado 412 00:15:04,299 --> 00:15:04,940 lo capturo 413 00:15:04,940 --> 00:15:08,159 y si hay algún problema 414 00:15:08,159 --> 00:15:10,419 es que aquí sí que me interesa que la aplicación 415 00:15:10,419 --> 00:15:12,519 pare, si hay algún problema es que los ficheros 416 00:15:12,519 --> 00:15:14,320 no están en uso, algo no funciona 417 00:15:14,320 --> 00:15:16,440 pues entonces aquí pues sí que le digo 418 00:15:16,440 --> 00:15:18,220 mira, problema con los datos, se cierra 419 00:15:18,220 --> 00:15:20,259 y ya está, ahí me voy, system.exe 420 00:15:20,259 --> 00:15:21,299 y se acabó 421 00:15:21,299 --> 00:15:26,620 aviso de que la aplicación no funciona 422 00:15:26,620 --> 00:15:28,200 porque es que no consigo instanciar esto 423 00:15:28,200 --> 00:15:30,299 si no consigo instanciarlo, es que ¿para qué va a salir 424 00:15:30,299 --> 00:15:30,980 la aplicación? 425 00:15:32,240 --> 00:15:33,440 si este no existe, me voy 426 00:15:33,440 --> 00:15:36,279 bueno, pues mi main ya tiene el dado 427 00:15:36,279 --> 00:15:38,480 destino para los datos del destino 428 00:15:38,480 --> 00:15:40,340 y dado reserva para los datos de reserva 429 00:15:40,340 --> 00:15:42,279 y ahora ya en mi main 430 00:15:42,279 --> 00:15:44,320 yo he añadido solo realizar 431 00:15:44,320 --> 00:15:45,720 reserva y consultarla 432 00:15:45,720 --> 00:15:48,620 pero las otras opciones serían sencillas 433 00:15:48,620 --> 00:15:50,940 he añadido solo estas dos, realizar y consultar 434 00:15:50,940 --> 00:15:52,440 entonces la 5 435 00:15:52,440 --> 00:15:53,240 realizar 436 00:15:53,240 --> 00:15:56,000 pues la 5 437 00:15:56,000 --> 00:15:58,620 Hay que pedir el nombre del cliente 438 00:15:58,620 --> 00:16:00,759 La fecha de la reserva 439 00:16:00,759 --> 00:16:03,100 Aquí para crear el local date 440 00:16:03,100 --> 00:16:05,139 Con la fecha, imagino que habréis consultado 441 00:16:05,139 --> 00:16:06,299 A HGPT 442 00:16:06,299 --> 00:16:08,500 Pero en realidad no hace falta 443 00:16:08,500 --> 00:16:11,080 Si uno tiene más o menos unas pautas básicas 444 00:16:11,080 --> 00:16:13,059 ¿Qué tenemos que instanciar? 445 00:16:13,799 --> 00:16:15,440 Tenemos que instanciar un local date 446 00:16:15,440 --> 00:16:18,100 Que transforme 447 00:16:18,100 --> 00:16:19,379 El string 448 00:16:19,379 --> 00:16:21,240 Que me hayan pasado con la fecha 449 00:16:21,240 --> 00:16:23,759 El string, en el formato que yo ya he dicho 450 00:16:23,759 --> 00:16:25,279 No, la fecha me la han pasado 451 00:16:25,279 --> 00:16:27,259 como un string, entonces 452 00:16:27,259 --> 00:16:29,159 si se nos queda la pauta de 453 00:16:29,159 --> 00:16:31,639 las clases nuevas de los paquetes 454 00:16:31,639 --> 00:16:33,259 nuevos y el 455 00:16:33,259 --> 00:16:35,419 java time es nuevo, no se 456 00:16:35,419 --> 00:16:37,279 instancian prácticamente nunca con 457 00:16:37,279 --> 00:16:39,240 constructor, se suelen 458 00:16:39,240 --> 00:16:41,440 instanciar con métodos estáticos 459 00:16:41,440 --> 00:16:42,419 de la propia clase 460 00:16:42,419 --> 00:16:45,200 entonces si yo ya me quedo con eso 461 00:16:45,200 --> 00:16:47,259 las clases nuevas de paquetes nuevos 462 00:16:47,259 --> 00:16:48,240 como java time 463 00:16:48,240 --> 00:16:51,480 no suelen instanciarse con new local 464 00:16:51,480 --> 00:16:53,639 date sino con métodos estáticos de constructor 465 00:16:53,639 --> 00:16:55,879 entonces yo ya busco local date punto 466 00:16:55,879 --> 00:16:56,639 a ver que tiene 467 00:16:56,639 --> 00:17:00,120 si busco local date punto a ver que tiene, veo que tiene un parse 468 00:17:00,120 --> 00:17:01,940 que me explica que justo 469 00:17:01,940 --> 00:17:04,000 a partir de un string 470 00:17:04,000 --> 00:17:05,880 que tú le pases a partir de un string 471 00:17:05,880 --> 00:17:07,339 te crea el local date 472 00:17:07,339 --> 00:17:10,059 eso es lo que me explica el parse, anda justo es el que quiero 473 00:17:10,059 --> 00:17:11,900 ah pero me pide el string 474 00:17:11,900 --> 00:17:13,980 fecha, pero luego me pide 475 00:17:13,980 --> 00:17:15,920 un objeto 476 00:17:15,920 --> 00:17:17,960 de este tipo, porque me lo explica 477 00:17:17,960 --> 00:17:18,680 lo estoy leyendo 478 00:17:18,680 --> 00:17:21,980 un objeto de este tipo con la sintaxis 479 00:17:21,980 --> 00:17:22,799 del string 480 00:17:22,799 --> 00:17:25,259 pues tengo que instanciar este objeto 481 00:17:25,259 --> 00:17:27,119 de nuevo, esto no se suele instanciar 482 00:17:27,119 --> 00:17:28,019 con un constructor 483 00:17:28,019 --> 00:17:30,839 con métodos estáticos, pues si yo pongo 484 00:17:30,839 --> 00:17:33,299 este objeto que es el que me pide que le pase aquí 485 00:17:33,299 --> 00:17:35,140 punto para los estáticos 486 00:17:35,140 --> 00:17:37,480 pues rápidamente vería, encontraría 487 00:17:37,480 --> 00:17:38,920 anda, pero si tengo un método 488 00:17:38,920 --> 00:17:41,039 of pattern que me está 489 00:17:41,039 --> 00:17:42,599 explicando que tú pásale 490 00:17:42,599 --> 00:17:45,339 una sintaxis 491 00:17:45,339 --> 00:17:47,019 y él ya te crea el 492 00:17:47,019 --> 00:17:48,779 datetimeformatter asociado 493 00:17:48,779 --> 00:17:51,160 pues ya está, es que no me ha hecho falta 494 00:17:51,160 --> 00:17:53,339 a consultar a HGPT ni a nada, simplemente 495 00:17:53,339 --> 00:17:55,039 con A 496 00:17:55,039 --> 00:17:57,140 acordarse uno 497 00:17:57,140 --> 00:17:59,099 de que en los 498 00:17:59,099 --> 00:18:01,380 paquetes más recientes, desde hace ya tiempo 499 00:18:01,380 --> 00:18:03,140 los objetos 500 00:18:03,140 --> 00:18:04,119 que uno necesita 501 00:18:04,119 --> 00:18:07,079 no se suelen instanciar directamente 502 00:18:07,079 --> 00:18:08,140 con el constructor 503 00:18:08,140 --> 00:18:11,000 sino a través de métodos estáticos 504 00:18:11,000 --> 00:18:13,019 de la propia clase, veis aquí 505 00:18:13,019 --> 00:18:14,940 el objeto local date lo hemos 506 00:18:14,940 --> 00:18:17,299 instanciado con el método parse de local date 507 00:18:17,299 --> 00:18:18,920 y el objeto dateta 508 00:18:18,920 --> 00:18:20,960 informater lo hemos instanciado con el 509 00:18:20,960 --> 00:18:22,859 Método of pattern de esto. 510 00:18:23,880 --> 00:18:25,079 Ahora ya, sabiendo eso, 511 00:18:25,220 --> 00:18:27,500 uno puede cotillear los métodos estáticos que hay. 512 00:18:27,880 --> 00:18:30,339 Y rápidamente encuentra el método estático que necesita. 513 00:18:30,759 --> 00:18:32,299 Este para crear el local date 514 00:18:32,299 --> 00:18:38,319 y este para crear el formateador 515 00:18:38,319 --> 00:18:41,019 a partir de la sintaxis que a mí me dé la gana. 516 00:18:41,119 --> 00:18:42,779 Yo he puesto esta porque me ha dado la gana 517 00:18:42,779 --> 00:18:44,240 poner esta para el usuario. 518 00:18:45,059 --> 00:18:46,460 Pero podría haber puesto otra. 519 00:18:49,910 --> 00:18:51,470 Vale, pues entonces ya tenemos el local date. 520 00:18:51,549 --> 00:18:52,450 Estamos haciendo la reserva. 521 00:18:53,250 --> 00:18:53,690 Destino. 522 00:18:53,690 --> 00:18:56,430 el destino me dirá París, Roma 523 00:18:56,430 --> 00:18:58,470 lo que sea, pero yo a la reserva 524 00:18:58,470 --> 00:18:59,970 le tengo que pasar un objeto destino 525 00:18:59,970 --> 00:19:02,349 pues que suerte 526 00:19:02,349 --> 00:19:04,109 porque los destinos están en un fichero 527 00:19:04,109 --> 00:19:06,369 ¿tengo yo que irme al fichero a abrirlo? 528 00:19:06,450 --> 00:19:08,309 pues no, porque para eso tengo un DAO 529 00:19:08,309 --> 00:19:10,369 destino, para eso son los DAOs 530 00:19:10,369 --> 00:19:12,329 para que yo me olvide desde el main de toda la 531 00:19:12,329 --> 00:19:13,490 complejidad de acceso a datos 532 00:19:13,490 --> 00:19:16,410 anda, yo tengo un DAO destino que tenía 533 00:19:16,410 --> 00:19:17,210 un método get 534 00:19:17,210 --> 00:19:20,390 que le doy el nombre del destino y me da el objeto 535 00:19:20,390 --> 00:19:24,460 completo, entonces aquí 536 00:19:24,460 --> 00:19:26,619 vemos la importancia de los dados, yo me olvido 537 00:19:26,619 --> 00:19:27,660 del acceso a datos 538 00:19:27,660 --> 00:19:30,599 yo pido el nombre del destino, París 539 00:19:30,599 --> 00:19:32,299 pero yo necesito el objeto entero 540 00:19:32,299 --> 00:19:34,200 para pasar eso a la reserva 541 00:19:34,200 --> 00:19:36,059 pues lo saco del dado destino, venga 542 00:19:36,059 --> 00:19:37,559 lo saco 543 00:19:37,559 --> 00:19:40,420 ¿qué es null? pues le digo, perdona 544 00:19:40,420 --> 00:19:41,480 pero el que me has dado no existe 545 00:19:41,480 --> 00:19:42,700 y ya está 546 00:19:42,700 --> 00:19:46,180 ¿qué no es null? pues ahora ya sí 547 00:19:46,180 --> 00:19:47,700 me creo la reserva 548 00:19:47,700 --> 00:19:50,539 con el código que yo he generado 549 00:19:50,539 --> 00:19:52,500 yo por mi cuenta 550 00:19:52,500 --> 00:19:54,079 para asegurarme de que es único 551 00:19:54,079 --> 00:19:56,299 con el nombre que me han dado 552 00:19:56,299 --> 00:19:58,400 con la fecha local de que he instanciado 553 00:19:58,400 --> 00:20:00,539 y con el objeto destino que he leído del fichero 554 00:20:00,539 --> 00:20:02,319 me creo la reserva 555 00:20:02,319 --> 00:20:04,339 y la inserto a través del dado 556 00:20:04,339 --> 00:20:06,539 reserva y ya está 557 00:20:06,539 --> 00:20:08,519 capturo 558 00:20:08,519 --> 00:20:12,920 la excepción y listo 559 00:20:12,920 --> 00:20:14,940 ¿vale? entonces 560 00:20:14,940 --> 00:20:16,819 el main es rollo 561 00:20:16,819 --> 00:20:18,819 porque tiene la parte de comunicación con el 562 00:20:18,819 --> 00:20:20,579 usuario, pues coger los datos 563 00:20:20,579 --> 00:20:21,720 instanciar los objetos 564 00:20:21,720 --> 00:20:24,799 pero toda la parte de acceso 565 00:20:24,799 --> 00:20:26,980 a datos la tiene subcontratada 566 00:20:26,980 --> 00:20:27,599 a los DAOs. 567 00:20:28,359 --> 00:20:30,980 La tiene aquí subcontratada para sacar el destino 568 00:20:30,980 --> 00:20:32,680 a través de un nombre. 569 00:20:33,460 --> 00:20:35,079 La tiene subcontratada 570 00:20:35,079 --> 00:20:37,019 aquí para insertar 571 00:20:37,019 --> 00:20:38,960 la reserva una vez que ya la tiene instanciada. 572 00:20:39,079 --> 00:20:41,099 Lo tiene eso ya subcontratado, que es la idea. 573 00:20:41,380 --> 00:20:43,099 Cada cosa se ocupa de lo suyo. 574 00:20:45,599 --> 00:20:46,400 Y no hay mezcla. 575 00:20:47,359 --> 00:20:48,299 Y bueno, sí. 576 00:20:51,619 --> 00:20:52,779 Sí, lo único que he hecho 577 00:20:52,779 --> 00:20:54,980 es en la propia clase 578 00:20:54,980 --> 00:20:56,880 reserva, como son códigos de reserva 579 00:20:56,880 --> 00:20:58,000 he hecho una variable estática 580 00:20:58,000 --> 00:21:01,220 que inicialmente la he iniciado 581 00:21:01,220 --> 00:21:03,259 a 1 y es la que uso 582 00:21:03,259 --> 00:21:05,039 para cada vez que creo una reserva nueva 583 00:21:05,039 --> 00:21:07,119 le paso esta y la dejo 584 00:21:07,119 --> 00:21:12,140 incrementada y así el usuario 585 00:21:12,140 --> 00:21:14,279 no tiene que meter el código de reserva para crearla 586 00:21:14,279 --> 00:21:15,099 se crea solo 587 00:21:15,099 --> 00:21:21,440 y ya está, efectivamente 588 00:21:21,440 --> 00:21:23,160 sí 589 00:21:23,160 --> 00:21:25,819 efectivamente 590 00:21:25,819 --> 00:21:27,039 L es que 591 00:21:27,039 --> 00:21:29,559 lo interprete como long, como lo ha declarado 592 00:21:29,559 --> 00:21:32,410 como long, vale 593 00:21:32,410 --> 00:21:37,809 cuando lo usas en el main 594 00:21:37,809 --> 00:21:40,210 pero efectivamente tienes razón 595 00:21:40,210 --> 00:21:42,509 que cada vez que arrancas la aplicación de nuevas 596 00:21:42,509 --> 00:21:44,930 y metes una reserva y hay reservas de antes 597 00:21:44,930 --> 00:21:46,609 te va a repetir los códigos 598 00:21:46,609 --> 00:21:48,970 entonces esto deberíamos cambiarlo 599 00:21:48,970 --> 00:21:50,029 para que 600 00:21:50,029 --> 00:21:54,230 como tenemos el dado de reservas 601 00:21:54,230 --> 00:21:56,369 pues podemos tirar del dado de reserva 602 00:21:56,369 --> 00:21:59,009 un find all y coger la última de ellas 603 00:21:59,009 --> 00:21:59,490 y ya está 604 00:21:59,490 --> 00:22:06,579 exacto, claro, porque 605 00:22:06,579 --> 00:22:08,339 esto de aquí efectivamente 606 00:22:08,339 --> 00:22:10,279 no está muy bien pensado así 607 00:22:10,279 --> 00:22:12,160 van a repetirse los códigos 608 00:22:12,160 --> 00:22:13,660 vale 609 00:22:13,660 --> 00:22:18,759 bueno, pues esto 610 00:22:18,759 --> 00:22:20,819 efectivamente habría que modificarlo 611 00:22:20,819 --> 00:22:27,099 y nada, la prueba 612 00:22:27,099 --> 00:22:27,819 del get 613 00:22:27,819 --> 00:22:32,130 es que ya no tiene nada que hacer 614 00:22:32,130 --> 00:22:34,289 se pide el código de reserva 615 00:22:34,289 --> 00:22:36,250 y muestra el 616 00:22:36,250 --> 00:22:38,890 a través del dado de reserva 617 00:22:38,890 --> 00:22:40,329 saca la reserva y la muestra 618 00:22:40,329 --> 00:22:42,529 punto string en reserva 619 00:22:42,529 --> 00:22:43,970 para que lo muestre y se acabó 620 00:22:43,970 --> 00:22:48,269 vale, entonces bueno habría que añadir 621 00:22:48,269 --> 00:22:49,710 el método de borrar y modificar 622 00:22:49,710 --> 00:22:51,470 pero es llamar al dado de reserva 623 00:22:51,470 --> 00:22:53,710 y en cada uno de ellos, en el borrar 624 00:22:53,710 --> 00:22:55,730 pedir el código, ¿cuál quieres borrar? 625 00:22:55,910 --> 00:22:57,750 pides el código y llamas a delete 626 00:22:57,750 --> 00:22:59,990 en actualizar tienes que pedir 627 00:22:59,990 --> 00:23:01,650 los nuevos datos y llamar a update 628 00:23:01,650 --> 00:23:02,569 y ya está 629 00:23:02,569 --> 00:23:05,049 y esto 630 00:23:05,049 --> 00:23:07,690 lo pongo aquí 631 00:23:07,690 --> 00:23:09,269 para que no se me olvide 632 00:23:09,269 --> 00:23:18,410 al más alto 633 00:23:18,410 --> 00:23:21,309 del fichero 634 00:23:21,309 --> 00:23:24,490 si existe 635 00:23:24,490 --> 00:23:27,230 vale, pues entonces 636 00:23:27,230 --> 00:23:29,509 estos serían dos 637 00:23:29,509 --> 00:23:31,829 daos básicos, que son las acciones 638 00:23:31,829 --> 00:23:34,190 básicas, insertar 639 00:23:34,190 --> 00:23:36,190 borrar, consultar 640 00:23:36,190 --> 00:23:37,190 y actualizar 641 00:23:37,190 --> 00:23:39,950 y recuperar todos el find all 642 00:23:39,950 --> 00:23:41,890 que también se suele poner, pues para que tú tengas 643 00:23:41,890 --> 00:23:43,769 un listado de todo, vale 644 00:23:43,769 --> 00:23:45,170 pero puede que mi aplicación 645 00:23:45,170 --> 00:23:46,369 quiera hacer más cosas 646 00:23:46,369 --> 00:23:47,230 aparte de eso 647 00:23:47,230 --> 00:23:48,970 pues por ejemplo 648 00:23:48,970 --> 00:23:51,710 ¿cuál es la próxima reserva? 649 00:23:52,230 --> 00:23:53,829 o dame todas las reservas 650 00:23:53,829 --> 00:23:55,390 de un cliente 651 00:23:55,390 --> 00:23:56,049 por ejemplo 652 00:23:56,049 --> 00:23:57,289 o ese tipo de cosas 653 00:23:57,289 --> 00:23:59,730 esas son ya funcionalidades 654 00:23:59,730 --> 00:24:00,890 más específicas 655 00:24:00,890 --> 00:24:01,670 de mi aplicación 656 00:24:01,670 --> 00:24:03,490 no son el cruz genérico 657 00:24:03,490 --> 00:24:05,269 no son el cruz genérico 658 00:24:05,269 --> 00:24:05,630 que es 659 00:24:05,630 --> 00:24:06,529 insert, delete 660 00:24:06,529 --> 00:24:08,390 con get 661 00:24:08,390 --> 00:24:09,470 y update 662 00:24:09,470 --> 00:24:11,250 ¿vale? 663 00:24:11,309 --> 00:24:12,470 son cosas específicas 664 00:24:12,470 --> 00:24:13,589 pues como estas que digo 665 00:24:13,589 --> 00:24:16,410 pues eliminar todas las consultas 666 00:24:16,410 --> 00:24:17,990 todas las reservas de un cliente 667 00:24:17,990 --> 00:24:20,569 por ejemplo, esas son cosas específicas 668 00:24:20,569 --> 00:24:22,109 a eso se lo suelen 669 00:24:22,109 --> 00:24:23,369 llamar servicios 670 00:24:23,369 --> 00:24:26,049 los servicios que da mi aplicación, los servicios 671 00:24:26,049 --> 00:24:27,990 entonces los métodos que 672 00:24:27,990 --> 00:24:30,130 hacen eso, no lo suelo 673 00:24:30,130 --> 00:24:31,869 meter en el DAO, porque el DAO suele 674 00:24:31,869 --> 00:24:33,789 tener un uso que es las cuatro acciones 675 00:24:33,789 --> 00:24:36,029 básicas, más el find all que es recuperar 676 00:24:36,029 --> 00:24:37,609 todos, entonces 677 00:24:37,609 --> 00:24:40,150 lo que solemos hacer es una clase 678 00:24:40,150 --> 00:24:41,970 de servicio donde 679 00:24:41,970 --> 00:24:50,150 están los métodos que hacen las cosas específicas y esos métodos se construirán llamando a los 680 00:24:50,150 --> 00:24:56,869 de DAO. Esos métodos no tienen por qué ellos acceder al fichero, no. Esos métodos se construyen 681 00:24:56,869 --> 00:25:02,829 combinando los de DAO para hacer lo que toque hacer. Entonces, nosotros vamos a incorporar aquí 682 00:25:02,829 --> 00:25:10,029 una capa servicio y ya nos quedaríamos tranquilos con esta aplicación. Tenemos ya una capa de main, 683 00:25:10,029 --> 00:25:12,049 La del modelo con reserva y destino 684 00:25:12,049 --> 00:25:13,910 La de DAO, que es el acceso básico 685 00:25:13,910 --> 00:25:15,349 A los datos 686 00:25:15,349 --> 00:25:18,170 Las cuatro cosas que hacen falta 687 00:25:18,170 --> 00:25:19,009 Bueno, hacen falta más 688 00:25:19,009 --> 00:25:21,430 Y ahora vamos a meter una capa 689 00:25:21,430 --> 00:25:22,650 Por aquí, un paquete 690 00:25:22,650 --> 00:25:25,769 Pues service, por ejemplo 691 00:25:25,769 --> 00:25:31,880 Y ahora una clase 692 00:25:31,880 --> 00:25:32,539 Que es 693 00:25:32,539 --> 00:25:37,609 A ver, lo vamos a dejar planteados 694 00:25:37,609 --> 00:25:38,529 Quedáis haciéndolo 695 00:25:38,529 --> 00:25:41,069 Y así ya no sirve de parada 696 00:25:41,069 --> 00:25:45,519 Vale, pues 697 00:25:45,519 --> 00:25:48,859 Reserva 698 00:25:48,859 --> 00:25:52,079 Service 699 00:25:52,079 --> 00:25:58,160 Venga, servicios que queremos hacer aquí 700 00:25:58,160 --> 00:25:59,940 Pues por ejemplo 701 00:25:59,940 --> 00:26:01,380 Vamos a poner tres 702 00:26:01,380 --> 00:26:04,000 Listado 703 00:26:04,000 --> 00:26:05,640 De la 704 00:26:05,640 --> 00:26:07,119 De la 705 00:26:07,119 --> 00:26:09,420 No, que te devuelva 706 00:26:09,420 --> 00:26:11,440 La próxima reserva 707 00:26:11,440 --> 00:26:12,640 Más próxima en tiempo 708 00:26:12,640 --> 00:26:13,980 Entonces 709 00:26:13,980 --> 00:26:17,400 La reserva que esté de más próximo 710 00:26:17,400 --> 00:26:18,119 Vencimiento 711 00:26:18,119 --> 00:26:20,519 A la reserva que esté más próxima en el tiempo 712 00:26:20,519 --> 00:26:21,240 En fecha 713 00:26:21,240 --> 00:26:22,400 ¿A qué vez a mañana? 714 00:26:22,579 --> 00:26:24,559 La que esté más cerca de hoy 715 00:26:24,559 --> 00:26:25,819 Vale 716 00:26:25,819 --> 00:26:30,599 Es que no sé cómo llamarlo 717 00:26:30,599 --> 00:26:36,299 Reserva más próxima 718 00:26:36,299 --> 00:26:38,799 Vale 719 00:26:38,799 --> 00:26:54,779 Otro, por ejemplo 720 00:26:54,779 --> 00:26:57,059 Todas las reservas de un cliente 721 00:26:57,059 --> 00:26:58,500 Eso podría ser típico 722 00:26:58,500 --> 00:27:06,140 Reservas 723 00:27:06,140 --> 00:27:10,009 Cliente 724 00:27:10,009 --> 00:27:18,410 Sí, sí, sí 725 00:27:18,410 --> 00:27:20,190 El parámetro que se me ha olvidado pasárselo 726 00:27:20,190 --> 00:27:21,170 Estaba poniendo esto 727 00:27:21,170 --> 00:27:26,079 Lista de 728 00:27:26,079 --> 00:27:27,039 Sí, a ver 729 00:27:27,039 --> 00:27:30,460 Lista de reserva 730 00:27:30,460 --> 00:27:32,140 Y aquí habría que pasarle 731 00:27:32,140 --> 00:27:36,230 Nom del cliente 732 00:27:36,230 --> 00:27:44,960 Y ahora 733 00:27:44,960 --> 00:27:46,759 Pues por ejemplo, un destino 734 00:27:46,759 --> 00:27:48,400 Se ha caído 735 00:27:48,400 --> 00:27:50,799 Pues vamos a eliminar 736 00:27:50,799 --> 00:27:52,119 Todas las reservas de un destino 737 00:27:52,119 --> 00:27:53,940 Por ejemplo 738 00:27:53,940 --> 00:28:01,119 elimina reservas 739 00:28:01,119 --> 00:28:05,750 le pasas el nombre 740 00:28:05,750 --> 00:28:06,549 de un destino 741 00:28:06,549 --> 00:28:09,970 y así esta aplicación 742 00:28:09,970 --> 00:28:11,250 podría tener 743 00:28:11,250 --> 00:28:13,130 tropecientos mil servicios 744 00:28:13,130 --> 00:28:15,369 todos con su nombre 745 00:28:15,369 --> 00:28:16,769 y estos nombres ya si que 746 00:28:16,769 --> 00:28:19,390 son lo más explicativo posible, los de DAO 747 00:28:19,390 --> 00:28:21,230 son como métodos más estándar, GET 748 00:28:21,230 --> 00:28:22,910 UDATE, DELETE 749 00:28:22,910 --> 00:28:25,650 esto es ya lo que haga mi aplicación 750 00:28:25,650 --> 00:28:26,670 como podría ser 751 00:28:26,670 --> 00:28:30,269 hacer un descuento de 10% 752 00:28:30,269 --> 00:28:32,869 al cliente, a un cliente 753 00:28:32,869 --> 00:28:34,670 habría mil servicios que se podrían hacer 754 00:28:34,670 --> 00:28:36,970 como seguro que os aburrís 755 00:28:36,970 --> 00:28:38,569 mucho, vamos a ver, ese me ha gustado 756 00:28:38,569 --> 00:28:40,049 el de hacer un descuento 757 00:28:40,049 --> 00:28:42,730 boolean 758 00:28:42,730 --> 00:28:44,869 descuento 759 00:28:45,470 --> 00:28:46,410 cliente 760 00:28:46,410 --> 00:28:48,589 y al descuento cliente 761 00:28:48,589 --> 00:28:50,690 se le pasaría el nombre del cliente 762 00:28:50,690 --> 00:28:52,750 al que le vamos a hacer 763 00:28:52,750 --> 00:28:53,490 un descuento 764 00:28:53,490 --> 00:28:56,849 y el porcentaje del 765 00:28:56,849 --> 00:28:57,549 descuento 766 00:28:57,549 --> 00:29:03,160 Porcentaje 767 00:29:03,160 --> 00:29:04,119 Descuento 768 00:29:04,119 --> 00:29:07,279 Venga, nos estamos viniendo muy arriba 769 00:29:07,279 --> 00:29:09,059 Doberman, has dicho 770 00:29:09,059 --> 00:29:14,140 Eh 771 00:29:14,140 --> 00:29:16,859 Si 772 00:29:16,859 --> 00:29:17,599 Si le 773 00:29:17,599 --> 00:29:20,940 Si le quieres hacer un 3,7 774 00:29:20,940 --> 00:29:21,720 De descuento 775 00:29:21,720 --> 00:29:23,799 Un 0, 776 00:29:23,980 --> 00:29:25,740 Bueno, yo lo dejo en int 777 00:29:25,740 --> 00:29:26,920 Que el label me da ansiedad 778 00:29:26,920 --> 00:29:31,259 Vale, pues entonces 779 00:29:31,259 --> 00:29:33,799 La idea es que estos 780 00:29:33,799 --> 00:29:34,859 Servicios de aquí 781 00:29:34,859 --> 00:29:36,779 Estos servicios 782 00:29:36,779 --> 00:29:39,420 Tengan que llamar 783 00:29:39,420 --> 00:29:40,539 Los métodos del DAO 784 00:29:40,539 --> 00:29:42,480 Hacer cosas con ellos, combinarlos 785 00:29:42,480 --> 00:29:44,180 Yo que sé, hacer lo que toque 786 00:29:44,180 --> 00:29:45,700 Entonces 787 00:29:45,700 --> 00:29:48,539 Esta clase de servicio va a necesitar 788 00:29:48,539 --> 00:29:50,839 Los objetos reserva DAO 789 00:29:50,839 --> 00:29:51,940 Y todos esos de aquí 790 00:29:51,940 --> 00:29:54,559 Y un destino DAO a lo mejor también 791 00:29:54,559 --> 00:29:56,640 Va a necesitar esto 792 00:29:56,640 --> 00:29:58,019 Un objeto 793 00:29:58,019 --> 00:30:00,980 Reserva DAO 794 00:30:00,980 --> 00:30:04,079 Para trabajar 795 00:30:04,079 --> 00:30:05,599 Lo va a necesitar para trabajar 796 00:30:05,599 --> 00:30:08,119 Y puede que también necesite 797 00:30:08,119 --> 00:30:10,579 No lo sabemos, puede que también necesite 798 00:30:10,579 --> 00:30:13,059 Un objeto 799 00:30:13,059 --> 00:30:14,039 Destino dado 800 00:30:14,039 --> 00:30:15,779 Puede que también lo necesite 801 00:30:15,779 --> 00:30:18,460 A lo mejor no 802 00:30:18,460 --> 00:30:19,059 No sabemos 803 00:30:19,059 --> 00:30:24,619 Bueno, si queremos eliminar las reservas 804 00:30:24,619 --> 00:30:25,819 Y eliminar también el destino 805 00:30:25,819 --> 00:30:28,519 Porque ese se ha ido 806 00:30:28,519 --> 00:30:30,299 Vale, entonces 807 00:30:30,299 --> 00:30:32,359 Va a tener que trabajar con estos 808 00:30:32,359 --> 00:30:34,420 Haciendo aquí cosas con ellos 809 00:30:34,420 --> 00:30:36,640 Entonces vamos a pasárselos 810 00:30:36,640 --> 00:30:38,039 Por el constructor los dos 811 00:30:38,039 --> 00:30:40,920 Vamos a hacerle un constructor 812 00:30:40,920 --> 00:31:00,259 Y ahora a ver si conseguimos hacer estos métodos 813 00:31:00,259 --> 00:31:03,619 Apoyándonos en los métodos del DAO 814 00:31:03,619 --> 00:31:07,660 Sin necesidad de acceder al fichero de otra manera distinta 815 00:31:07,660 --> 00:31:09,680 Apoyándonos en los métodos 816 00:31:09,680 --> 00:31:13,559 A ver si conseguimos hacerlos