1 00:00:00,000 --> 00:00:07,679 Vale, pues para eso vamos a hacer un reservadao también 2 00:00:07,679 --> 00:00:13,960 Para sacar a una clase aparte todos los métodos relacionados con gestionar los datos 3 00:00:13,960 --> 00:00:15,480 De reservas, los datos 4 00:00:15,480 --> 00:00:17,239 Y ya mi main que lo llame y ya está 5 00:00:17,239 --> 00:00:19,500 Mi main o mi interfaz o lo que sea 6 00:00:19,500 --> 00:00:21,440 Entonces, estructura que vamos a hacer 7 00:00:21,440 --> 00:00:23,039 Pues dentro del dao este 8 00:00:23,039 --> 00:00:36,909 Un new reservadao 9 00:00:36,909 --> 00:00:37,170 Vale 10 00:00:37,170 --> 00:00:45,679 Y ahora, este reservadao como va a tener los métodos 11 00:00:45,679 --> 00:00:50,920 se accedan a los datos, sus propiedades, la información que la caracteriza, 12 00:00:51,140 --> 00:00:54,020 está relacionada con la ubicación de los datos, donde están los datos. 13 00:00:54,179 --> 00:00:57,159 Entonces, el fichero de reservas también lo tiene que tener ahí. 14 00:00:57,700 --> 00:01:04,659 Igual que tenía el de destino, su fichero de destino, de destinos, pues este igual. 15 00:01:06,079 --> 00:01:13,000 Vamos a ponerle una propiedad que sean los datos de las reservas y ya está. 16 00:01:13,359 --> 00:01:21,359 Uy, ¿dónde estamos? Vale. 17 00:01:21,359 --> 00:01:23,379 pero hemos dicho 18 00:01:23,379 --> 00:01:25,379 asumimos 19 00:01:25,379 --> 00:01:27,120 que no tenemos miles 20 00:01:27,120 --> 00:01:28,280 de reservas 21 00:01:28,280 --> 00:01:31,280 somos una empresa pequeñita, no tenemos miles 22 00:01:31,280 --> 00:01:33,099 entonces la gestión de los datos 23 00:01:33,099 --> 00:01:34,959 en lugar de cada inserción 24 00:01:34,959 --> 00:01:37,500 cada eliminación, ir al fichero 25 00:01:37,500 --> 00:01:39,060 y hacerla, que es 26 00:01:39,060 --> 00:01:41,519 costoso de alguna manera en tiempo 27 00:01:41,519 --> 00:01:47,019 vamos a cargar todos los datos 28 00:01:47,019 --> 00:01:48,760 y que la gestión de los datos se haga 29 00:01:48,760 --> 00:01:50,500 en la memoria principal de mi aplicación 30 00:01:50,500 --> 00:01:52,879 eso sí, cuando la aplicación se cierre 31 00:01:52,879 --> 00:01:54,260 o en el momento que yo decida 32 00:01:54,260 --> 00:01:57,239 o a lo mejor puedo programar yo cada 5 minutos 33 00:01:57,239 --> 00:01:59,359 cuando sea, pues que se guarde 34 00:01:59,359 --> 00:02:00,620 ¿vale? 35 00:02:01,140 --> 00:02:03,219 pero toda mi gestión de inserciones 36 00:02:03,219 --> 00:02:05,239 que se haga en RAM que es muchísimo más rápido 37 00:02:05,239 --> 00:02:06,939 el único precio que pago 38 00:02:06,939 --> 00:02:08,659 es que tengo la RAM ocupada con muchos datos 39 00:02:08,659 --> 00:02:10,979 pero hombre, tendrían que ser muchísimos 40 00:02:10,979 --> 00:02:12,300 para que no me compensara 41 00:02:12,300 --> 00:02:14,939 la rapidez de la gestión de un map o de un list 42 00:02:14,939 --> 00:02:16,659 respecto a accesos al fichero 43 00:02:16,659 --> 00:02:18,379 entonces vamos a poner 44 00:02:18,379 --> 00:02:19,919 vamos a ponerlo aquí 45 00:02:19,919 --> 00:02:24,759 también los datos con los que van a acceder 46 00:02:24,759 --> 00:02:28,000 los métodos, pues hemos dicho que van a hacer un map 47 00:02:28,000 --> 00:02:32,740 para optimizar las búsquedas 48 00:02:32,740 --> 00:02:41,509 las modificaciones, vamos a poner 49 00:02:41,509 --> 00:02:45,490 un map donde la clave del map sea el código 50 00:02:45,490 --> 00:02:48,530 de la reserva porque es lo que lo identifica de forma única 51 00:02:48,530 --> 00:02:52,330 luego la clave del map es de tipo long 52 00:02:52,330 --> 00:02:59,090 Recordad que los tipos genéricos no pueden ser primitivos 53 00:02:59,090 --> 00:03:00,750 Tienen que ser siempre tipos objeto 54 00:03:00,750 --> 00:03:04,909 En este caso reserva es long que es primitivo 55 00:03:04,909 --> 00:03:09,090 Pero tiene su envolvente objeto long con mayúscula sin problema 56 00:03:09,090 --> 00:03:11,669 Y el valor de este map es esto 57 00:03:11,669 --> 00:03:13,349 Vale 58 00:03:13,349 --> 00:03:26,650 Ahora para que ahora yo pueda hacer los métodos de insert de lo que sea 59 00:03:26,650 --> 00:03:29,610 Esos métodos tienen que tener 60 00:03:29,610 --> 00:03:30,909 Esto ya relleno 61 00:03:30,909 --> 00:03:32,009 Con los datos 62 00:03:32,009 --> 00:03:34,710 Pues todo eso lo puedo hacer en el constructor 63 00:03:34,710 --> 00:03:37,110 ¿Vale? Cuando se instancie el DAO 64 00:03:37,110 --> 00:03:38,909 Que es el que luego va a llamar el 65 00:03:38,909 --> 00:03:41,050 ¿Vale? 66 00:03:43,240 --> 00:03:45,199 Pues cuando se instancie el DAO 67 00:03:45,199 --> 00:03:51,659 Pues a este DAO 68 00:03:51,659 --> 00:03:52,900 Se le pasará el fichero 69 00:03:52,900 --> 00:03:57,919 Donde están los datos 70 00:03:57,919 --> 00:03:59,400 Se le pasará el fichero 71 00:03:59,400 --> 00:04:01,419 Y ahora 72 00:04:01,419 --> 00:04:09,000 Data Access Object 73 00:04:09,000 --> 00:04:10,840 es el acrónimo 74 00:04:10,840 --> 00:04:13,300 habitual que se le pone como coletilla 75 00:04:13,300 --> 00:04:14,879 a las clases 76 00:04:14,879 --> 00:04:16,360 que se ocupan de esa parte 77 00:04:16,360 --> 00:04:18,839 del acceso a los datos 78 00:04:18,839 --> 00:04:19,680 que están por ahí 79 00:04:19,680 --> 00:04:22,720 y que mi aplicación 80 00:04:22,720 --> 00:04:25,180 necesita, vale pues entonces 81 00:04:25,180 --> 00:04:26,980 cuando instanciemos 82 00:04:26,980 --> 00:04:29,079 este objeto, que es el objeto que nos va a permitir 83 00:04:29,079 --> 00:04:30,959 acceder a los datos, cuando lo 84 00:04:30,959 --> 00:04:32,959 instanciemos, se rellenará 85 00:04:32,959 --> 00:04:35,199 esta propiedad imprescindible 86 00:04:35,199 --> 00:04:35,959 para 87 00:04:35,959 --> 00:04:38,980 para poder hacer los datos 88 00:04:38,980 --> 00:04:41,120 y ahora ya de paso pues vamos aquí 89 00:04:41,120 --> 00:04:42,740 a rellenar el map 90 00:04:42,740 --> 00:04:44,699 volcar, vale, volcamos 91 00:04:44,699 --> 00:04:46,600 el fichero en el map 92 00:04:46,600 --> 00:04:47,579 y ya está 93 00:04:47,579 --> 00:04:51,040 y a partir de ahí ya los métodos trabajan con el 94 00:04:51,040 --> 00:04:52,899 dao y se acabó, con el map 95 00:04:52,899 --> 00:04:58,050 y se acabó, vale 96 00:04:58,050 --> 00:05:00,209 entonces para volcar el fichero en el map 97 00:05:00,209 --> 00:05:01,649 pues lo volcáis 98 00:05:01,649 --> 00:05:04,699 y ahora 99 00:05:04,699 --> 00:05:07,959 recordad que de cada objeto reserva 100 00:05:07,959 --> 00:05:09,660 que leáis de este 101 00:05:09,660 --> 00:05:10,300 fichero 102 00:05:10,300 --> 00:05:13,680 tenéis que meter en la clave 103 00:05:13,680 --> 00:05:15,259 la propiedad 104 00:05:15,259 --> 00:05:17,699 código y el objeto 105 00:05:17,699 --> 00:05:19,819 entero en el valor 106 00:05:19,819 --> 00:05:21,639 bueno 107 00:05:21,639 --> 00:05:23,660 y aquí que métodos para reserva queremos 108 00:05:23,660 --> 00:05:24,779 pues los de siempre 109 00:05:24,779 --> 00:05:27,579 queremos, que queremos hacer con las reservas 110 00:05:27,579 --> 00:05:29,899 por insertar una reserva 111 00:05:29,899 --> 00:05:30,360 nueva 112 00:05:30,360 --> 00:05:41,240 el que queráis 113 00:05:41,240 --> 00:05:43,160 tomáis, bueno venga 114 00:05:43,160 --> 00:05:45,259 vamos a hacerlo todos igual, para si luego lo 115 00:05:45,259 --> 00:05:47,120 corrijamos, lo corregimos para que cada uno 116 00:05:47,120 --> 00:05:48,779 vale, pues aquí 117 00:05:48,779 --> 00:05:51,319 ¿qué decisión tomaríamos? ¿trimap o hasmap? 118 00:05:51,839 --> 00:05:52,899 por defecto 119 00:05:52,899 --> 00:05:55,160 usaríamos hasmap, ¿vale? 120 00:05:55,240 --> 00:05:57,420 es la más cómoda, la más eficiente, la más todo 121 00:05:57,420 --> 00:06:01,540 trimap también funciona muy bien 122 00:06:01,540 --> 00:06:03,240 y trimap nos puede 123 00:06:03,240 --> 00:06:05,180 ser útil cuando tenemos que hacer 124 00:06:05,180 --> 00:06:06,540 iteraciones a menudo 125 00:06:06,540 --> 00:06:09,259 y nos viene bien que esas iteraciones estén 126 00:06:09,259 --> 00:06:10,800 ordenadas, entonces 127 00:06:10,800 --> 00:06:13,259 alguna funcionalidad de esta aplicación nos puede 128 00:06:13,259 --> 00:06:15,100 interesar que sea sacar las 129 00:06:15,100 --> 00:06:17,579 listados de reservas, por ejemplo 130 00:06:17,579 --> 00:06:19,319 lo que pasa es que si fueran 131 00:06:19,319 --> 00:06:21,399 listados de reservas, nos interesaría algún tipo 132 00:06:21,399 --> 00:06:21,879 de orden 133 00:06:21,879 --> 00:06:23,800 pues 134 00:06:23,800 --> 00:06:25,939 la master panel 135 00:06:25,939 --> 00:06:28,240 venga, muy bien 136 00:06:28,240 --> 00:06:31,319 porque así os habéis complicado mucho la vida 137 00:06:31,319 --> 00:06:33,079 muy bien, vale 138 00:06:33,079 --> 00:06:35,379 vale, entonces 139 00:06:35,379 --> 00:06:37,339 el tree, si queremos que 140 00:06:37,339 --> 00:06:38,879 el tree map, ese de ahí 141 00:06:38,879 --> 00:06:41,240 nos itere por orden de fecha 142 00:06:41,240 --> 00:06:43,060 que tiene sentido, me vaya sacando primero 143 00:06:43,060 --> 00:06:44,980 las que están a punto de vencerse 144 00:06:44,980 --> 00:06:48,259 yo tengo que meter un criterio de orden aquí 145 00:06:48,259 --> 00:06:50,240 ¿vale? pero ojo 146 00:06:50,240 --> 00:06:52,579 como me haga aquí un implements comparable 147 00:06:52,579 --> 00:06:54,639 y meta el criterio de orden por fecha 148 00:06:54,639 --> 00:06:55,800 ¿qué pasa? 149 00:06:56,060 --> 00:06:58,899 que lo he roto todo, he roto la aplicación 150 00:06:58,899 --> 00:06:59,740 ¿por qué? 151 00:07:00,639 --> 00:07:02,660 porque fecha no es la clave 152 00:07:02,660 --> 00:07:04,660 primaria del objeto reserva 153 00:07:04,660 --> 00:07:06,540 entonces 154 00:07:06,540 --> 00:07:08,240 si yo uso un trimap 155 00:07:08,240 --> 00:07:10,399 el trimap 156 00:07:10,399 --> 00:07:12,180 ah bueno no, vale, vale, nada, no, no 157 00:07:12,180 --> 00:07:14,019 porque lo que, perdón 158 00:07:14,019 --> 00:07:16,220 eso sería si estuviéramos usando 159 00:07:16,220 --> 00:07:18,240 un hash 160 00:07:18,240 --> 00:07:20,420 un triset, perdón 161 00:07:20,420 --> 00:07:22,759 un triset, porque el trimap 162 00:07:22,759 --> 00:07:24,860 lo que le preocupa 163 00:07:24,860 --> 00:07:26,220 es la clave 164 00:07:26,220 --> 00:07:28,779 donde tenemos el reservado 165 00:07:28,779 --> 00:07:29,379 aquí 166 00:07:29,379 --> 00:07:32,920 vale, es decir 167 00:07:32,920 --> 00:07:33,759 en el trimap 168 00:07:33,759 --> 00:07:38,300 lo que se guarda en un triset 169 00:07:38,300 --> 00:07:40,319 es la clave 170 00:07:40,319 --> 00:07:42,500 lo que se guarda en un triset son las claves 171 00:07:42,500 --> 00:07:44,360 entonces el que tiene que tener criterio 172 00:07:44,360 --> 00:07:46,339 de orden es la clave 173 00:07:46,339 --> 00:07:48,420 ¿vale? entonces 174 00:07:48,420 --> 00:07:50,920 me lo va a dar, la iteración 175 00:07:50,920 --> 00:07:52,779 va a ser por orden de la clave 176 00:07:52,779 --> 00:07:54,579 con lo cual si nosotros queremos 177 00:07:54,579 --> 00:07:56,420 iteraciones por orden de 178 00:07:56,420 --> 00:07:58,699 reserva con el criterio que sea 179 00:07:58,699 --> 00:08:00,720 tendremos que ordenar por nuestra 180 00:08:00,720 --> 00:08:02,759 cuenta, con lo cual en este caso 181 00:08:02,759 --> 00:08:04,759 no ganamos nada poniendo un trimap 182 00:08:04,759 --> 00:08:06,800 salvo que las iteraciones van 183 00:08:06,800 --> 00:08:08,399 por orden de código 184 00:08:08,399 --> 00:08:10,699 si eso nos interesa vale, porque el 185 00:08:10,699 --> 00:08:12,680 trimap necesita orden aquí donde pone 186 00:08:12,680 --> 00:08:13,639 órdenes en el código 187 00:08:13,639 --> 00:08:15,860 no en la clave, en el código 188 00:08:15,860 --> 00:08:18,420 entonces el código 189 00:08:18,420 --> 00:08:19,680 es 190 00:08:19,680 --> 00:08:22,620 el código de la reserva 191 00:08:22,620 --> 00:08:24,199 entonces bueno 192 00:08:24,199 --> 00:08:25,699 podemos poner un trimap 193 00:08:25,699 --> 00:08:27,959 no hay nada que añadir porque 194 00:08:27,959 --> 00:08:30,120 ya tiene el comparable suyo 195 00:08:30,120 --> 00:08:32,179 orden numérico 196 00:08:32,179 --> 00:08:34,360 orden numérico, podemos poner un trimap 197 00:08:34,360 --> 00:08:36,620 y no tenemos 198 00:08:36,620 --> 00:08:38,139 que añadir nada a la aplicación 199 00:08:38,139 --> 00:08:39,980 no tenemos que hacer nada, un trimap 200 00:08:39,980 --> 00:08:42,019 que ganamos poniendo el trimap 201 00:08:42,019 --> 00:08:43,220 que cada vez que hiteremos 202 00:08:43,220 --> 00:08:45,799 nos va a salir por orden de 203 00:08:45,799 --> 00:08:46,580 código 204 00:08:46,580 --> 00:08:49,179 eso tampoco es que nos aporte mucho 205 00:08:49,179 --> 00:08:52,200 si quisiéramos ordenar por reservas para hacer cosas 206 00:08:52,200 --> 00:08:53,639 pues tenemos que hacerlo aparte 207 00:08:53,639 --> 00:08:54,740 con nuestra cuenta 208 00:08:54,740 --> 00:08:58,059 bueno, vamos a incorporar 209 00:08:58,059 --> 00:08:59,279 un método que lo haga, pero 210 00:08:59,279 --> 00:09:01,700 entonces, has 211 00:09:01,700 --> 00:09:03,100 trimap o has map 212 00:09:03,100 --> 00:09:05,899 me da igual, porque es que el resto de la aplicación 213 00:09:05,899 --> 00:09:07,379 va a ser idéntica, me da igual 214 00:09:07,379 --> 00:09:09,740 el que elijáis, da lo mismo, no hay que 215 00:09:09,740 --> 00:09:11,860 hacer nada, no hay que añadir nada en reserva 216 00:09:11,860 --> 00:09:13,500 por poner trimap, no hay que añadir nada 217 00:09:13,500 --> 00:09:15,679 sería aquí donde hay que añadir, y luego ya lo tiene 218 00:09:15,679 --> 00:09:17,019 así que nada 219 00:09:17,019 --> 00:09:19,879 así que usar la que más os guste 220 00:09:19,879 --> 00:09:21,639 ante la duda, pues siempre 221 00:09:21,639 --> 00:09:22,279 hashmap 222 00:09:22,279 --> 00:09:25,960 más sencilla de implementar por dentro 223 00:09:25,960 --> 00:09:26,559 con lo cual 224 00:09:26,559 --> 00:09:29,360 vale, pues entonces 225 00:09:29,360 --> 00:09:30,080 insert 226 00:09:30,080 --> 00:09:33,159 la que tú quieras 227 00:09:33,159 --> 00:09:35,659 pero sí, yo en una situación así usaría 228 00:09:35,659 --> 00:09:36,539 hashmap y ya está 229 00:09:36,539 --> 00:09:39,279 porque iterar por orden de código 230 00:09:39,279 --> 00:09:42,659 Si no me interesa especialmente 231 00:09:42,659 --> 00:09:44,980 Vale, venga 232 00:09:44,980 --> 00:09:45,879 Pues insert 233 00:09:45,879 --> 00:09:50,240 Insertar una reserva 234 00:09:50,240 --> 00:09:51,659 Vale, entonces 235 00:09:51,659 --> 00:09:54,019 Los del CRUD habría que hacerlos todos 236 00:09:54,019 --> 00:10:02,409 Get 237 00:10:02,409 --> 00:10:05,250 Porque recuperamos 238 00:10:05,250 --> 00:10:06,669 Por código, lógicamente 239 00:10:06,669 --> 00:10:10,470 Código de reserva 240 00:10:10,470 --> 00:10:24,840 No lo vais a hacer vosotros aquí 241 00:10:26,179 --> 00:10:29,019 estamos planteando la aplicación con los huecos 242 00:10:29,019 --> 00:10:30,179 que tenéis que hacer ahora vosotros 243 00:10:30,179 --> 00:10:32,379 el fichero no lo inicializa 244 00:10:32,379 --> 00:10:34,600 porque eso ya lo hará el main, eso no depende del DAO 245 00:10:34,600 --> 00:10:36,440 el DAO 246 00:10:36,440 --> 00:10:38,120 es una clase que 247 00:10:38,120 --> 00:10:40,639 puede funcionar luego ya con cualquier 248 00:10:40,639 --> 00:10:42,259 ejemplo concreto de aplicación 249 00:10:42,259 --> 00:10:44,320 si yo compro una aplicación y ha cambiado el fichero 250 00:10:44,320 --> 00:10:46,740 no tiene sentido que yo me venga aquí 251 00:10:46,740 --> 00:10:47,379 a cambiarlo 252 00:10:47,379 --> 00:10:49,820 entonces se lo pasaré por constructor 253 00:10:49,820 --> 00:10:52,200 esta clase tiene que ser lo más independiente posible 254 00:10:52,200 --> 00:10:54,100 entonces esta clase 255 00:10:54,100 --> 00:10:55,960 cuando se la llame desde un 256 00:10:55,960 --> 00:10:58,200 main, desde una interfaz gráfica 257 00:10:58,200 --> 00:10:59,820 desde una aplicación web, desde donde sea 258 00:10:59,820 --> 00:11:02,100 cuando se la llame, ya se le pasará 259 00:11:02,100 --> 00:11:04,039 el fichero de datos concreto con el que va a trabajar 260 00:11:04,039 --> 00:11:05,860 no tiene sentido que yo 261 00:11:05,860 --> 00:11:08,059 lo hardcodee aquí dentro 262 00:11:08,059 --> 00:11:09,759 porque si lo 263 00:11:09,759 --> 00:11:11,980 hardcodee aquí dentro, en cuanto cambie 264 00:11:11,980 --> 00:11:13,899 mi fichero, me tengo que venir aquí a cambiarlo 265 00:11:13,899 --> 00:11:15,360 y ese es un sitio un poquito 266 00:11:15,360 --> 00:11:18,039 oculto, que seguramente no tenga 267 00:11:18,039 --> 00:11:20,179 ni acceso a esta clase 268 00:11:20,179 --> 00:11:21,799 seguramente no tenga ni acceso a esa clase 269 00:11:21,799 --> 00:11:25,159 Vale, entonces 270 00:11:25,159 --> 00:11:28,720 Insertamos una reserva 271 00:11:28,720 --> 00:11:33,580 Borramos 272 00:11:33,580 --> 00:11:35,620 Una reserva 273 00:11:35,620 --> 00:11:42,820 Borrar, se hará por código 274 00:11:42,820 --> 00:11:43,700 Lógicamente 275 00:11:43,700 --> 00:11:56,330 Recuperar, he puesto aquí 276 00:11:56,330 --> 00:11:58,269 Boolean, recuperar, me tendrá que recuperar 277 00:11:58,269 --> 00:12:00,230 El objeto concreto, completo 278 00:12:00,230 --> 00:12:02,149 Claro, recuperar una 279 00:12:02,149 --> 00:12:04,210 Reserva dado el código 280 00:12:04,210 --> 00:12:09,899 Me falta modificar 281 00:12:09,899 --> 00:12:11,940 Esto como se va a hacer en el map 282 00:12:11,940 --> 00:12:14,240 estos métodos van a ser cortísimos 283 00:12:14,240 --> 00:12:15,940 mucho más fáciles que con el fichero 284 00:12:15,940 --> 00:12:17,620 porque se van a hacer en el map directamente 285 00:12:17,620 --> 00:12:20,019 y ahora me falta modificar 286 00:12:20,019 --> 00:12:30,909 una reserva 287 00:12:30,909 --> 00:12:43,620 vale, pues la reserva con el código 288 00:12:43,620 --> 00:12:45,000 tal y como aparezca esta 289 00:12:45,000 --> 00:12:46,240 la modificamos 290 00:12:46,240 --> 00:12:57,129 porque a lo update le tengo que pasar tanto el código 291 00:12:57,129 --> 00:12:58,870 como los nuevos datos 292 00:12:58,870 --> 00:13:00,990 y es que el código ya va aquí 293 00:13:00,990 --> 00:13:02,809 dentro, porque lo que no hago nunca 294 00:13:02,809 --> 00:13:04,129 es cambiar la clave primaria 295 00:13:04,129 --> 00:13:06,710 pasar un código y ahora decirle 296 00:13:06,710 --> 00:13:08,649 a ese código, cambia 297 00:13:08,649 --> 00:13:10,690 todos los datos que están en reserva, pasarle 298 00:13:10,690 --> 00:13:12,590 una reserva con el código completo, estaría 299 00:13:12,590 --> 00:13:14,490 cambiando la clave primaria, que eso no debo tocarlo 300 00:13:14,490 --> 00:13:16,830 porque voy a hacer una inconsistencia de datos casi seguro 301 00:13:16,830 --> 00:13:18,730 entonces ahí ya va 302 00:13:18,730 --> 00:13:20,570 todo, el código de la que hay que cambiar 303 00:13:20,570 --> 00:13:22,409 y el resto de los datos que hay que cambiar 304 00:13:22,409 --> 00:13:24,389 vale 305 00:13:24,389 --> 00:13:26,750 entonces hay un método típico también en los 306 00:13:26,750 --> 00:13:28,029 datos que no lo han puesto en destino 307 00:13:28,029 --> 00:13:30,669 pero bueno, que es habitual que es 308 00:13:30,669 --> 00:13:31,990 devuélveme todos 309 00:13:31,990 --> 00:13:34,409 Hay un método típico 310 00:13:34,409 --> 00:13:35,049 Que es el 311 00:13:35,049 --> 00:13:38,730 Se suele llamar find all o como sea 312 00:13:38,730 --> 00:13:41,649 Que me devuelve 313 00:13:41,649 --> 00:13:43,570 Todas las reservas 314 00:13:43,570 --> 00:13:45,049 Todas 315 00:13:45,049 --> 00:13:48,950 Normalmente se hace que me devuelva una colección 316 00:13:48,950 --> 00:14:01,159 Uy 317 00:14:01,159 --> 00:14:04,899 Vale 318 00:14:04,899 --> 00:14:07,360 Este me va a devolver una colección con todas las reservas 319 00:14:07,360 --> 00:14:08,960 Este me inserta una reserva 320 00:14:08,960 --> 00:14:10,580 Me inserta una reserva nueva 321 00:14:10,580 --> 00:14:12,799 Me borra una reserva 322 00:14:12,799 --> 00:14:15,039 y todo esto trabaja todo con el map 323 00:14:15,039 --> 00:14:17,279 luego van a ser métodos cortitos 324 00:14:17,279 --> 00:14:28,679 ¿vale? 325 00:14:32,500 --> 00:14:33,019 entonces 326 00:14:33,019 --> 00:14:42,460 para que lo que haga estos métodos 327 00:14:42,460 --> 00:14:43,720 se refleje en el fichero 328 00:14:43,720 --> 00:14:47,220 podríamos optar por muchas 329 00:14:47,220 --> 00:14:48,799 cosas ¿no? 330 00:14:50,159 --> 00:14:51,980 es decir, que sea la aplicación 331 00:14:51,980 --> 00:14:53,000 la que se preocupe 332 00:14:53,000 --> 00:14:55,820 pero eso hace a la aplicación demasiado 333 00:14:55,820 --> 00:14:57,820 dependiente de cómo está 334 00:14:57,820 --> 00:14:59,419 hecho por dentro el DAO, eso es feo 335 00:14:59,419 --> 00:15:01,779 es decir, mi DAO es muy 336 00:15:01,779 --> 00:15:04,000 cómodo porque yo lo instancio 337 00:15:04,000 --> 00:15:05,840 y él me hace esta trampita 338 00:15:05,840 --> 00:15:06,379 por dentro. 339 00:15:07,440 --> 00:15:09,620 Trampita que no está mal. Me hace esta 340 00:15:09,620 --> 00:15:11,740 trampita, que es volcarlo. Pero el que 341 00:15:11,740 --> 00:15:13,740 lo instancia en realidad no tiene que saber 342 00:15:13,740 --> 00:15:15,600 cómo funciona por dentro. Si está trabajando 343 00:15:15,600 --> 00:15:17,639 directamente con el fichero cada vez que 344 00:15:17,639 --> 00:15:19,539 hace un insert o un get, o si está 345 00:15:19,539 --> 00:15:21,559 trabajando con un map temporal, el que 346 00:15:21,559 --> 00:15:23,480 lo instancia y lo usa en realidad no tendría por qué 347 00:15:23,480 --> 00:15:25,779 saberlo. Esto tiene que estar lo más desacoplado 348 00:15:25,779 --> 00:15:27,639 posible. Bueno, pues 349 00:15:27,639 --> 00:15:29,700 cuando lo instanciamos ha hecho esta trampita, 350 00:15:30,580 --> 00:15:31,379 ha creado el map, 351 00:15:31,779 --> 00:15:34,159 pero claro, también ya que hace 352 00:15:34,159 --> 00:15:36,019 esta trampita, el DAO es responsable 353 00:15:36,019 --> 00:15:38,480 también de cuando hace las acciones 354 00:15:38,480 --> 00:15:40,200 que provocan 355 00:15:40,200 --> 00:15:42,159 modificaciones, que esas acciones 356 00:15:42,159 --> 00:15:44,440 se reflejen en el fichero, es responsable 357 00:15:44,440 --> 00:15:45,440 porque el que lo llama 358 00:15:45,440 --> 00:15:48,240 no tiene por qué decir, uy, soy responsable 359 00:15:48,240 --> 00:15:50,059 yo de después de haber llamado al DAO 360 00:15:50,059 --> 00:15:52,340 que se guarde todo en el fichero 361 00:15:52,340 --> 00:15:54,500 antes de irme, no debería 362 00:15:54,500 --> 00:15:54,960 entonces 363 00:15:54,960 --> 00:15:58,080 dentro de cada uno de estos 364 00:15:58,080 --> 00:15:59,460 podemos incorporar en el DAO 365 00:15:59,460 --> 00:16:01,700 un método sincroniza, por ejemplo 366 00:16:01,700 --> 00:16:03,220 que lleva el map al fichero. 367 00:16:03,340 --> 00:16:04,919 Es un write, lleva el map y se acabó. 368 00:16:05,639 --> 00:16:05,840 ¿Vale? 369 00:16:05,899 --> 00:16:07,919 Y ahora, cada uno de estos métodos, 370 00:16:08,100 --> 00:16:09,440 una vez que han hecho lo que tienen que hacer, 371 00:16:09,519 --> 00:16:10,860 llaman a ese sincroniza. 372 00:16:11,399 --> 00:16:13,259 O persiste o con lo queramos llamar. 373 00:16:13,820 --> 00:16:14,220 ¿Vale? 374 00:16:14,779 --> 00:16:16,080 Pues vamos a crearlo aquí. 375 00:16:16,580 --> 00:16:16,860 Venga. 376 00:16:17,460 --> 00:16:33,820 Vamos a hacer aquí un... 377 00:16:33,820 --> 00:16:35,120 ¿Y este método qué va a hacer? 378 00:16:35,759 --> 00:16:39,320 Va a pasar el contenido del map al fichero. 379 00:16:55,570 --> 00:16:57,610 Entonces, cuando arranque la aplicación, 380 00:16:57,610 --> 00:16:59,610 la primera vez que no hay ninguna reserva, 381 00:17:00,210 --> 00:17:02,230 acordados de más o menos ajustar 382 00:17:02,230 --> 00:17:04,309 todos los flancos, pues el 383 00:17:04,309 --> 00:17:05,849 map habrá que instanciarlo vacío 384 00:17:05,849 --> 00:17:08,609 claro, en ese caso hay que instanciarlo vacío 385 00:17:08,609 --> 00:17:10,250 entonces aquí también tenemos dos 386 00:17:10,250 --> 00:17:12,609 formas de trabajar, la cómoda y la menos cómoda 387 00:17:12,609 --> 00:17:14,250 y no pasa nada, podemos trabajar con 388 00:17:14,250 --> 00:17:16,029 la cómoda, si queremos, aunque es la que 389 00:17:16,029 --> 00:17:17,890 a lo mejor de la que menos aprendemos 390 00:17:17,890 --> 00:17:20,650 la menos cómoda 391 00:17:20,650 --> 00:17:22,190 voy recorriendo 392 00:17:22,190 --> 00:17:24,410 mi map y voy pasando 393 00:17:24,410 --> 00:17:26,730 cada objeto reserva, reserva, reserva 394 00:17:26,730 --> 00:17:28,250 luego me tengo que hacer 395 00:17:28,250 --> 00:17:30,289 el bucle de lectura, la menos 396 00:17:30,289 --> 00:17:32,130 cómoda, la más cómoda, el map 397 00:17:32,130 --> 00:17:33,329 en sí ya es un objeto 398 00:17:33,329 --> 00:17:35,630 pues escribo el map 399 00:17:35,630 --> 00:17:38,470 y ya está, y luego cuando tengo que recuperar 400 00:17:38,470 --> 00:17:39,430 aquí en el constructor 401 00:17:39,430 --> 00:17:43,619 cuando tengo que recuperar aquí en el constructor 402 00:17:43,619 --> 00:17:46,779 hago un único 403 00:17:46,779 --> 00:17:49,180 read object en el que leo el map entero 404 00:17:49,180 --> 00:17:51,880 esa sería la más cómoda 405 00:17:51,880 --> 00:17:56,799 ¿vale? ¿entendéis lo que digo? 406 00:17:57,019 --> 00:17:58,019 Sí, sí, pero una pregunta 407 00:17:58,019 --> 00:17:59,720 ¿tú quieres que 408 00:17:59,720 --> 00:18:02,579 recuperemos en cuanto se haga 409 00:18:02,579 --> 00:18:05,980 Cuando se hace reservado 410 00:18:05,980 --> 00:18:07,160 Hay dos opciones 411 00:18:07,160 --> 00:18:09,039 Que el fichero exista 412 00:18:09,039 --> 00:18:10,680 Y tenga datos 413 00:18:10,680 --> 00:18:12,460 En ese caso 414 00:18:12,460 --> 00:18:15,099 Lo tenemos que leer y llevarlo al map 415 00:18:15,099 --> 00:18:16,680 ¿Vale? 416 00:18:17,319 --> 00:18:19,079 Que el fichero no exista 417 00:18:19,079 --> 00:18:22,200 Que el fichero no exista 418 00:18:22,200 --> 00:18:24,339 O exista y no tenga datos 419 00:18:24,339 --> 00:18:24,960 Este vacío 420 00:18:24,960 --> 00:18:27,980 En ese caso lo que hay que hacer 421 00:18:27,980 --> 00:18:29,500 Es crear un map nuevo y limpio 422 00:18:29,500 --> 00:18:31,799 Ya está, hay que hacer un new map 423 00:18:31,799 --> 00:18:32,559 Nuevo y limpito 424 00:18:32,559 --> 00:18:34,759 se acabó, vale, entonces 425 00:18:34,759 --> 00:18:36,980 cuando arranque la aplicación, la primera vez 426 00:18:36,980 --> 00:18:38,900 que no hay reservas, se hará un map nuevo 427 00:18:38,900 --> 00:18:40,819 y limpito, ahora cuando 428 00:18:40,819 --> 00:18:43,339 empezamos a hacer cosas, el insert 429 00:18:43,339 --> 00:18:45,039 el delete 430 00:18:45,039 --> 00:18:46,420 cuando empezamos a hacer cosas 431 00:18:46,420 --> 00:18:49,160 cada uno de ellos tendrá que llamar 432 00:18:49,160 --> 00:18:50,859 a este método para una vez que 433 00:18:50,859 --> 00:18:52,819 ha terminado con el map de hacer lo que sea 434 00:18:52,819 --> 00:18:53,720 guardarlo en el fichero 435 00:18:53,720 --> 00:18:56,859 vale, pues 436 00:18:56,859 --> 00:18:58,900 entonces, ahora es cuando tenemos dos 437 00:18:58,900 --> 00:18:59,779 posibilidades 438 00:18:59,779 --> 00:19:02,180 Guardar las reservas 439 00:19:02,180 --> 00:19:02,859 Una por una 440 00:19:02,859 --> 00:19:05,779 Y tener un fichero con los objetos reserva 441 00:19:05,779 --> 00:19:08,119 Uno tras otro, reserva, reserva, reserva 442 00:19:08,119 --> 00:19:09,559 A lo cual iremos iterando el map 443 00:19:09,559 --> 00:19:11,599 Opción 2 444 00:19:11,599 --> 00:19:13,940 Darnos cuenta de que el map 445 00:19:13,940 --> 00:19:15,859 Ya es un objeto, objeto map 446 00:19:15,859 --> 00:19:16,960 Guardar el map 447 00:19:16,960 --> 00:19:19,880 Ya está, hago un write object 448 00:19:19,880 --> 00:19:21,579 Y le paso directamente el map 449 00:19:21,579 --> 00:19:23,019 ¿Vale? 450 00:19:23,319 --> 00:19:26,420 Entonces lleva map a fichero, entonces aquí tenemos dos posibilidades 451 00:19:26,420 --> 00:19:31,980 Iterar 452 00:19:31,980 --> 00:19:33,500 En el map 453 00:19:33,500 --> 00:19:43,309 Y guardar las reservas una a una 454 00:19:43,309 --> 00:19:44,869 Vamos a hacer esta 455 00:19:44,869 --> 00:19:48,849 Porque así practicamos, no se nos olvide iterar en un map 456 00:19:48,849 --> 00:19:52,450 Opción 2, la cómoda y fácil, que sería una línea 457 00:19:52,450 --> 00:20:04,619 Guardamos el map, el objeto map, en el fichero 458 00:20:04,619 --> 00:20:07,140 Con un único write object, guardo el objeto map 459 00:20:07,140 --> 00:20:13,470 Y ya está 460 00:20:13,470 --> 00:20:15,349 Cuando la aplicación termine 461 00:20:15,349 --> 00:20:17,670 en el fichero ya se habrá quedado 462 00:20:17,670 --> 00:20:19,509 lo del map porque esto ha ido llamando 463 00:20:19,509 --> 00:20:20,630 a persiste cada vez 464 00:20:20,630 --> 00:20:29,529 bueno pues al persiste un segundito 465 00:20:29,529 --> 00:20:32,029 para que el archivo se quede siempre 466 00:20:32,029 --> 00:20:34,130 actualizado no vaya a ser que haya 467 00:20:34,130 --> 00:20:36,029 otra aplicación por ahí accediendo a ella 468 00:20:36,029 --> 00:20:38,470 porque al fichero de reservas 469 00:20:38,470 --> 00:20:40,049 pues igual están accediendo 470 00:20:40,049 --> 00:20:42,130 más aplicaciones y tenemos que tenerlo actualizado 471 00:20:42,130 --> 00:20:42,630 siempre 472 00:20:42,630 --> 00:20:46,430 entonces para tenerlo actualizado siempre 473 00:20:46,430 --> 00:20:48,329 después de hacer 474 00:20:48,329 --> 00:20:50,069 cada modificación 475 00:20:50,069 --> 00:20:52,230 como por ejemplo este insert 476 00:20:52,230 --> 00:20:55,690 pues después de hacer lo que toque 477 00:20:55,690 --> 00:20:56,490 aquí 478 00:20:56,490 --> 00:20:58,390 lo que toque 479 00:20:58,390 --> 00:20:59,710 lo que sea 480 00:20:59,710 --> 00:21:03,230 pues llamaremos al persiste 481 00:21:03,230 --> 00:21:04,069 aquí no hace falta 482 00:21:04,069 --> 00:21:07,460 aquí no hace falta llamarle 483 00:21:07,460 --> 00:21:09,119 porque no se modifica el fichero 484 00:21:09,119 --> 00:21:09,980 no se modifica 485 00:21:09,980 --> 00:21:11,000 aquí si se modifica 486 00:21:11,000 --> 00:21:12,740 pues hay que llamarle 487 00:21:12,740 --> 00:21:15,000 aquí también se modifica en el delete 488 00:21:15,000 --> 00:21:25,460 aquí no se modifica 489 00:21:25,460 --> 00:21:26,700 porque estamos recuperando 490 00:21:26,700 --> 00:21:28,420 y aquí si se modifica 491 00:21:28,420 --> 00:21:30,099 porque estamos actualizando 492 00:21:30,099 --> 00:21:36,759 Vale, vamos a empezar con estos cuatro métodos 493 00:21:36,759 --> 00:21:37,680 Más el constructor 494 00:21:37,680 --> 00:21:40,460 Que vuelca el fichero si el fichero existe 495 00:21:40,460 --> 00:21:42,640 O si no, instancia el map 496 00:21:42,640 --> 00:21:44,059 Vacío, sin más 497 00:21:44,059 --> 00:21:46,660 Venga, vamos a empezar 498 00:21:46,660 --> 00:21:47,539 Con estos cuatro 499 00:21:47,539 --> 00:21:50,440 Y luego ya le añadimos alguna funcionalidad 500 00:21:50,440 --> 00:21:52,319 Que más queramos hacer con reservas 501 00:21:52,319 --> 00:21:54,740 Pues mostrarme la próxima reserva 502 00:21:54,740 --> 00:21:56,920 Que está por vencer 503 00:21:56,920 --> 00:21:58,119 Pues lo que sea 504 00:21:58,119 --> 00:22:00,900 Pues mostrarme si hay dos reservas en la misma fecha 505 00:22:00,900 --> 00:22:02,599 Luego ya podemos añadir 506 00:22:02,599 --> 00:22:13,400 Ya cosas que no son directamente el CRUD, que es consulta, guarda, borra o modifica, que es el CRUD. 507 00:22:14,000 --> 00:22:21,599 Ahora ya podemos añadir cosas que se derivan de esas cuatro acciones, pero ya son más adaptadas a una cosa en particular. 508 00:22:21,599 --> 00:22:27,500 Pues eso, encuéntrame si hay dos reservas que se separen más de un mes. 509 00:22:28,059 --> 00:22:30,680 Ya puedo yo decidir qué cosas le interesa hacer a mi aplicación. 510 00:22:30,680 --> 00:22:33,079 eso ya no son acciones 511 00:22:33,079 --> 00:22:34,380 básicas del CRUD 512 00:22:34,380 --> 00:22:36,940 eso ya se le llamarían servicios, porque ya son 513 00:22:36,940 --> 00:22:38,759 cosas específicas mías, pero ahora mismo 514 00:22:38,759 --> 00:22:40,460 vamos a hacer por ahora 515 00:22:40,460 --> 00:22:42,339 el CRUD este básico 516 00:22:42,339 --> 00:22:45,099 dentro de este reservadao 517 00:22:45,099 --> 00:22:46,819 con el constructor y el persiste 518 00:22:46,819 --> 00:22:48,799 y el persiste con la opción 1 519 00:22:48,799 --> 00:22:50,539 para obligarnos a iterar en el MAC 520 00:22:50,539 --> 00:22:51,519 ¿vale? 521 00:22:53,200 --> 00:22:55,140 venga, pues arrancad con estos 4 522 00:22:55,140 --> 00:22:56,980 los métodos van a ser muy 523 00:22:56,980 --> 00:22:58,960 sencillos, porque los métodos ya trabajan con el MAC