Cuando tienes una base de código más grande que, nuevamente, crece con el tiempo, lo que encontré útil es no extraer todos tus componentes en archivos diferentes. Este es uno de los problemas con las aplicaciones y con las bases de código a medida que crecen, ¿verdad? Tiendes a construir cada componente, tienes cada componente en un archivo nuevo. En este caso, por ejemplo, el encabezado del componente del panel de control aquí, nuevamente, el code no es importante, es más como un concepto aquí, así que hay un encabezado exportado desde este archivo, pero este archivo también contiene, de hecho, puedes verlo aquí, contiene otro componente llamado grupo de entrada de búsqueda. Esto suena como el tipo de componente que quieres extraer, ¿verdad? Pero es muy específico de ese encabezado. Se usa solo una vez allí, por lo que la decisión es que cuando esto sucede, mantienes los componentes junto al componente principal. Incluso si este archivo se vuelve largo, y puedo mostrar otro ejemplo aquí donde tenemos los planes de precios en la página de pago, y esto es como una UI compleja con todo tipo de cosas. Nuevamente, hay toneladas de componentes aquí definidos como puedes ver en el mismo archivo. Lo importante es que el archivo exporta un solo componente. Todo lo demás es como detalles del componente principal y no se abstrae, y no se lleva a algún lugar para ser reutilizado más tarde. Esto, nuevamente, volviendo a la lección, es la colocación en el sentido de que cuando escribes el code, lo escribes en un solo archivo siempre y cuando la preocupación sea la misma. Simplemente estás construyendo este nuevo componente, incluso si se descompone en varios componentes o tal vez tiene algunas funciones de utilidad.
Desde la perspectiva de lectura, también es muy beneficioso porque cualquiera que venga, y cuando sepa que tiene que cambiar algo en la página de planes, no tiene que buscar el componente real o el componente más pequeño que representa o tiene el cambio que tienen que introducir. Puedes estar viendo esto y pensando, ¿ok, esto es un caso en contra de la reusabilidad? ¿No deberías reutilizar demasiado code en las bases de código? La respuesta es sí y no. Como siempre, depende porque la lección número tres es que la reusabilidad es una espada de doble filo. Tiendes a pensar que todo, cuanto más reutilizas cosas, cuanto más abstraes utilidades y componentes, mejor es para la base de código a largo plazo. Pero yo argumentaría que hay una parte buena y una parte mala en la reusabilidad y tienes que equilibrarlas. En el lado positivo, tienes cosas como abstraer una caja negra, tienes deduplicación, obviamente no te repites y tienes separación de preocupaciones cuando lo haces bien. En el lado negativo, tienes código zombie, ¿verdad? Suponiendo que algunos de esos componentes más pequeños están escritos en archivos separados, por alguna razón, el archivo principal cambia, ya no usa uno de los componentes pequeños, pero no tienes una correlación directa de que, oh, tengo que eliminar esto.
Por supuesto, hay herramientas que te ayudan con eso, pero fundamentalmente, cuando estás pensando en hacer el cambio, no tienes que pensar dónde más se usa esta cosa o algo así. Tienes abstracción innecesaria, como mencioné con el ejemplo anterior, como la cosa de la API. Si tienes una excepción única a un tipo de diseño o arquitectura, entonces es mejor convertirla en una excepción que cambiar la abstracción para admitir esa excepción. Finalmente, la propagación de cambios, lo que significa que una vez que haces un cambio en un archivo, ¿cuántos archivos realmente dependen de eso o cuántos lugares, ya sabes, si tienes un fragmento de code que es reutilizable y tienes que cambiarlo, entonces ¿estás seguro de que en todos los lugares donde se usa esa cosa, no estás introduciendo algún error o algún problema, además del hecho de que tienes que pasar por un par de archivos o un conjunto de archivos para hacer un solo cambio en el code? Entonces, estás balanceando este deslizador cada vez que tienes que pensar en la reusabilidad, ¿verdad? ¿Cuánto quieres reutilizar? ¿Cuánto quieres duplicar? Me resulta útil tener tu propio framework para esto y pensarlo como, ok, ¿debería reutilizar esta cosa? Solo un par de preguntas que me gusta hacer sobre esto. ¿Estas cosas cambiarán juntas? ¿Significa que si el componente principal cambia, tengo que ir al componente hijo también y hacer un cambio? ¿O si el componente cambia, el utilitario que calcula algo también tiene que cambiar? Porque si cambian juntos, es mejor que estén juntos que tener algún tipo de reusabilidad o abstracción allí. Entonces, si decides abstraer algo, ¿con qué frecuencia cambias ese code reutilizable? Pensando en la propagación de cambios, ¿verdad? En el momento en que alguna pieza de code que es reutilizable necesita cambiar, hay una mayor probabilidad de que introduzcas algún tipo de error o regresión debido a la cantidad de lugares donde se usa esa cosa. Y finalmente, es muy importante para la fase de lectura, ¿necesitas entender el code que se reutiliza? Entonces, escribes el code, extraes algo en la utilidad, ¿el nombre de la utilidad te brinda suficiente información para que cuando alguien más entre y lea el code, o tú vengas después de un tiempo y leas el code, ¿sabes qué hay allí o tienes que abrirlo realmente para entender qué está sucediendo? Ok. Creo que esto se está quedando sin batería. Lección número cuatro, tal vez estoy un poco retrasado en el tiempo, pero veamos.
Comments