Ahora, lo sé, esto es una exageración, una exageración, olvidé la palabra. Pero de todos modos, han encontrado estas estructuras en grandes proyectos de código también. Entonces, esto es de un estudio de 2008 por McCormack, Rasnack, y Baldwin quienes estudian la complejidad arquitectónica y cómo la gente real organiza el software y qué conduce a mejores resultados en el software design, blah, blah, blah. Pero esto es una red, se llama DSM, que significa Diagrama de algo, pero básicamente la forma en que lees esto, cada eje representa archivos y el punto entre, así cada eje de la matriz, cada lado de la matriz es un archivo, cada punto dentro de la matriz representa una dependencia entre esos dos archivos. La razón por la que obtienes esa línea diagonal en el medio es que cada archivo depende de sí mismo o también llaman a esto matriz de visibilidad, donde la idea es qué archivos pueden ver en otros archivos o en otras funciones.
Ahora esto es cuando Mozilla algún tiempo antes de este estudio hizo un refactor y puedes ver que antes del refactor, el código era muy interdependiente, había mucha complejidad arquitectónica y luego cuando los ingenieros entraron y limpiaron el código, ves muchas menos dependencias porque estaban enfocándose en la complejidad arquitectónica, no en el mal código real dentro de cada módulo porque resulta que eso es más importante. Y también puedes ver esto en ejemplos más pequeños, en códigos más pequeños. Este es en realidad un gráfico de dependencia que saqué de nuestra base de código la semana pasada, donde nosotros construimos una nueva característica y la forma en que nos gusta construir cosas es simplemente lanzar cosas a la pared y luego Swiss entra y lo limpia y hace que todo esté bonito y organizado. Y en la parte superior, puedes ver, código muy confuso, hay un círculo de dependencia en el medio que está marcado por los círculos rojos y como todo está un poco enredado. Y luego, y también puedes ver que tenemos carpetas de componentes y carpetas de hooks y como un componente hijo muy pequeño va tres niveles arriba a un componente padre para llegar a un archivo padre para obtener un hook, etc. Y luego después, simplemente organizo las cosas por dominio empresarial. Obtienes carpetas bien nombradas que te dicen, oye, sabes, resumen de construcción, dentro de él está un índice y otros componentes y tiene un hook y es algo independiente. Puedes tomar esa carpeta y dondequiera que la coloques en tu base de código, va a funcionar porque puede cuidar de sí misma. Entonces, mira, el punto de lo que estoy tratando de decirte es que debes contener tu mal código, ponerlo en una pequeña caja y luego darle a la caja una interfaz bonita para que otras personas puedan usar tu mal código sin preocuparse de cómo el código en sí mismo realmente funciona y sin tener que leerlo. Esto también se llama una abstracción. Y lo principal que debes asegurarte cuando estás construyendo abstracciones es asegurarte de que no se filtran. Si recuerdas las diapositivas que te mostré desde el principio, esa es mi tesis por qué los componentes de servidor de React y las acciones de servidor aún no están del todo ahí es que la abstracción es un poco filtrada pero realmente me gusta la dirección en la que estamos yendo con eso donde podrías tener componentes autocontenidos que hacen todo en un solo archivo.
Y rápido, la forma más fácil de notar la complejidad arquitectónica es si usas una herramienta que dibuja un gráfico de dependencias, puedes ver que está todo enredado. Si tienes importaciones de puntos, puntos, puntos, barra, eso simplemente grita complejidad arquitectónica. Si tienes dependencias circulares, algo ha salido muy mal. Y generalmente si no puedes decir dónde funciona el código junto y cuál es una interfaz pública eso también es una mala señal. La mayoría de las veces he visto que eso sucede cuando las personas exportan cosas para que puedan tener pruebas unitarias y cosas así. Tengo una diapositiva más. Entonces la forma de solucionarlo es organizar las cosas por dominio empresarial, ponerlo en una carpeta, asegurarte de que cualquier cosa que esté estrechamente acoplada vive junta. Y luego un gran consejo que tengo es limpiar y validar tus entradas en los límites de un módulo. Y luego simplemente perfora las propiedades del data hacia abajo, y eso realmente funciona muy bien. Y sabes, si alguna vez tienes dudas entre copiar y pegar algún código que parece similar y separar las preocupaciones, siempre opta por separar las preocupaciones. Incluso si parece similar pero habla de un concepto diferente, es un código diferente y te prometo que juntarlo y hacerlo, optar por el principio DRY te disparará en el pie más tarde. Y eso es lo que tenía que decir sobre la complejidad arquitectónica. Si usas ese código QR, puedes ir, tengo un boletín de noticias, cosas así, algunas lecturas adicionales para cualquier nerd que quiera leer algunos documentos.
Comments