<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nicolás Azuaga</title>
    <description>The latest articles on DEV Community by Nicolás Azuaga (@azunico).</description>
    <link>https://dev.to/azunico</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F683807%2F408a455e-bbb8-4621-9e4f-80fe4df8bfdc.jpeg</url>
      <title>DEV Community: Nicolás Azuaga</title>
      <link>https://dev.to/azunico</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/azunico"/>
    <language>en</language>
    <item>
      <title>🧩 Diseño y Modelado: ¿son lo mismo?</title>
      <dc:creator>Nicolás Azuaga</dc:creator>
      <pubDate>Mon, 04 Aug 2025 12:50:02 +0000</pubDate>
      <link>https://dev.to/azunico/diseno-y-modelado-son-lo-mismo-50n5</link>
      <guid>https://dev.to/azunico/diseno-y-modelado-son-lo-mismo-50n5</guid>
      <description>&lt;h2&gt;
  
  
  ¿A qué nos referimos cuando hablamos de diseño en desarrollo de software?
&lt;/h2&gt;

&lt;p&gt;Cuando hablamos de &lt;em&gt;diseño&lt;/em&gt; en el desarrollo de software, no nos referimos a dibujar interfaces o hacer diagramas bonitos. En este contexto, &lt;strong&gt;diseñar es programar&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
El diseño se manifiesta en cómo estructuramos el código, cómo distribuimos responsabilidades, cómo nombramos, cómo pensamos en la mantenibilidad, la extensibilidad y la claridad del sistema.&lt;br&gt;&lt;br&gt;
Pero también incluye decisiones más amplias como &lt;strong&gt;cómo estructuramos el proyecto&lt;/strong&gt;, cómo organizamos carpetas, módulos y dependencias.&lt;/p&gt;




&lt;h2&gt;
  
  
  Entonces... ¿qué es modelar?
&lt;/h2&gt;

&lt;p&gt;El modelado tiene que ver con &lt;strong&gt;representar el dominio del problema&lt;/strong&gt;. Es la forma en que interpretamos y trasladamos el mundo real —o una parte de él— a estructuras que puede entender una máquina.&lt;/p&gt;

&lt;p&gt;Modelar es preguntarse:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“¿Cómo represento estos conceptos, reglas y comportamientos en código?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mientras que el diseño se enfoca en cómo se organizan esas piezas técnicas, el modelado se enfoca en &lt;strong&gt;qué piezas existen&lt;/strong&gt; y &lt;strong&gt;por qué&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Diseño y modelado son lo mismo?
&lt;/h2&gt;

&lt;p&gt;No. Pero están profundamente conectados.&lt;/p&gt;

&lt;p&gt;Podés tener un buen diseño de software (organizado, limpio, flexible), pero si el modelo no representa bien el dominio, el sistema va a fallar en su propósito.&lt;/p&gt;

&lt;p&gt;Y al revés: podés tener un modelo que entiende bien el negocio, pero con un diseño pobre que lo vuelve difícil de mantener o escalar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diseño y modelado trabajan juntos.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Uno apunta a la forma y el otro al contenido. Uno se preocupa por la estructura técnica, el otro por el significado del sistema.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué es un modelo?
&lt;/h2&gt;

&lt;p&gt;Un modelo es una &lt;strong&gt;representación simplificada de la realidad&lt;/strong&gt;. Como todo modelo, omite ciertos detalles para enfocarse en lo esencial.&lt;/p&gt;

&lt;p&gt;Una buena forma de entenderlo es con este ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuivillq27u3bffq34sx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuivillq27u3bffq34sx.png" alt="realidad-vs-modelo" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El dibujo &lt;strong&gt;es un modelo&lt;/strong&gt;: representa los elementos más importantes (puerta, ventanas, techo), pero deja de lado muchos detalles (materiales, instalaciones eléctricas, muebles).&lt;br&gt;&lt;br&gt;
Ese dibujo es útil porque nos permite &lt;strong&gt;trabajar con una abstracción comprensible&lt;/strong&gt;, sin tener que lidiar con la complejidad completa del objeto real.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tipos de modelos
&lt;/h2&gt;

&lt;p&gt;En el desarrollo de software, usamos distintos modelos según la capa en la que estemos trabajando (hablaremos de las capas más adelante). Algunos ejemplos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modelo de Dominio&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Representa los &lt;strong&gt;conceptos, reglas y comportamientos&lt;/strong&gt; de elementos del mundo real, según el problema que queremos resolver.&lt;br&gt;&lt;br&gt;
Está enfocado en la lógica del &lt;strong&gt;negocio o del juego&lt;/strong&gt;, y es &lt;strong&gt;independiente&lt;/strong&gt; de cómo se almacenan o se muestran los datos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplos (en el contexto de Pokémon):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Entrenador&lt;/code&gt;: puede capturar Pokémon, tiene un equipo limitado a 6.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pokemon&lt;/code&gt;: gana experiencia, sube de nivel, puede evolucionar.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Mochila&lt;/code&gt;: guarda objetos con capacidad limitada.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Batalla&lt;/code&gt;: gestiona el combate entre dos Pokémon.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este modelo contiene la &lt;strong&gt;verdadera lógica&lt;/strong&gt; del sistema. Si el juego cambiara de plataforma (de consola a web, por ejemplo), este modelo debería seguir funcionando sin cambios.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7dno2tupqi1gto357sw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7dno2tupqi1gto357sw.png" alt="Dominio" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Según el problema (dominio o contexto) que estemos modelando —o resolviendo—, nuestros objetos serán representaciones lógicas de esa realidad.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modelo de Datos&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Representa cómo se persisten esos datos, por ejemplo, en una base de datos, en memoria, en un archivo, etc.&lt;br&gt;&lt;br&gt;
  Puede incluir detalles técnicos como IDs, timestamps o claves foráneas.&lt;br&gt;&lt;br&gt;
  Ejemplo: una tabla SQL o un DTO (Data Transfer Object).&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7q6k2qdw5xhpfykpcgk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7q6k2qdw5xhpfykpcgk.png" alt="Modelo de Datos" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modelo de Vista (ViewModel)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Así como un dibujo simplifica una casa para mostrar solo lo esencial, un &lt;strong&gt;ViewModel&lt;/strong&gt; simplifica y estructura los datos necesarios para representar una vista de una interfaz de usuario.&lt;/p&gt;

&lt;p&gt;No es la vista en sí (no tiene estilos ni comportamiento visual), pero sí es un modelo de esa vista: una abstracción que representa únicamente lo importante para mostrar en pantalla —texto, imágenes, contadores, acciones, etc.&lt;/p&gt;

&lt;p&gt;Si la interfaz de usuario representa la realidad (la casa), el ViewModel será una &lt;strong&gt;simplificación de esa realidad&lt;/strong&gt; (el dibujo de la casa), lo que permite &lt;strong&gt;manejar mejor la complejidad&lt;/strong&gt; al trabajar con ella.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo:&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Vista
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5whw9twscgbz1t2e5k22.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5whw9twscgbz1t2e5k22.jpg" alt="Vista" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Modelo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F151fwjypgby2eaxtim1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F151fwjypgby2eaxtim1i.png" alt="ViewModel" width="800" height="1062"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Cada modelo cumple un propósito distinto.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Confundirlos o mezclarlos suele llevar a problemas de acoplamiento y dificultad para evolucionar el sistema.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Profundicemos un poco más en el diseño
&lt;/h2&gt;

&lt;p&gt;Diseñar software es tomar decisiones sobre &lt;strong&gt;cómo estructuramos el sistema para que sea comprensible, flexible y fácil de mantener&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En el frontend, esto incluye preguntas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Dónde pongo la lógica?&lt;/li&gt;
&lt;li&gt;¿Cómo divido mis componentes?&lt;/li&gt;
&lt;li&gt;¿Cómo evito que los cambios en un lugar rompan todo lo demás?&lt;/li&gt;
&lt;li&gt;¿Qué depende de qué? ¿Qué debería saber cada módulo?&lt;/li&gt;
&lt;li&gt;¿Cómo organizo la estructura del proyecto, carpetas y archivos?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un buen diseño &lt;strong&gt;reduce el costo del cambio&lt;/strong&gt;. Te permite agregar nuevas funcionalidades sin miedo a romper cosas. Hace que otros puedan leer tu código y entender qué hace. Y, sobre todo, hace que &lt;strong&gt;el software evolucione sin volverse un caos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No existe un único “buen diseño”, pero sí hay principios que nos ayudan a evaluarlo:&lt;/p&gt;

&lt;p&gt;Un buen diseño debe tener una &lt;strong&gt;Alta Cohesión&lt;/strong&gt; y un &lt;strong&gt;Bajo Acoplamiento&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Acoplamiento
&lt;/h3&gt;

&lt;p&gt;El acoplamiento describe el grado de dependencia entre módulos.&lt;br&gt;
Cuando un módulo está fuertemente acoplado a otros, necesita conocer demasiado sobre su estructura o comportamiento. Esto genera un sistema frágil, donde un cambio en un lugar puede afectar múltiples partes no relacionadas.&lt;/p&gt;

&lt;p&gt;En cambio, con bajo acoplamiento, los módulos mantienen vínculos débiles entre sí. Esto significa que se relacionan de forma superficial, sin depender fuertemente uno del otro. Cada módulo puede cambiar o evolucionar sin arrastrar al resto.&lt;/p&gt;

&lt;p&gt;Reducir el acoplamiento innecesario permite que el sistema sea más flexible, fácil de modificar y menos propenso a errores en cascada.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cohesión
&lt;/h3&gt;

&lt;p&gt;La cohesión se refiere a qué tan enfocada está una pieza de código en cumplir una única responsabilidad. Además, a nivel semántico, todos sus componentes deben estar relacionados entre sí.&lt;br&gt;
Por ejemplo, un módulo de pagos debería contener únicamente lo relacionado con pagos. No tendría sentido que incluya lógica sobre cobros u otros conceptos que diluyen la intención del módulo.&lt;br&gt;
Cuando todo está relacionado de forma coherente, el código es más fácil de entender y mantener.&lt;/p&gt;

&lt;p&gt;Un módulo con alta cohesión tiene todas sus funciones alineadas con un propósito claro y específico.&lt;br&gt;
Esto mejora la legibilidad, el mantenimiento y las pruebas. En cambio, un módulo con responsabilidades mezcladas tiende a volverse confuso, frágil y difícil de extender.&lt;/p&gt;




&lt;p&gt;Diseñar bien implica &lt;strong&gt;buscar bajo acoplamiento y alta cohesión&lt;/strong&gt; en todo el sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplos
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sistemas con Baja Cohesión y Bajo Acoplamiento&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb7vu0kbd76x50srf7lk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb7vu0kbd76x50srf7lk.png" alt="bajo-acoplamiento-baja-cohesion" width="672" height="830"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este tipo de sistemas, los módulos no están fuertemente conectados entre sí —lo cual parece positivo—, pero internamente cada módulo carece de coherencia: hacen muchas cosas distintas que no están claramente relacionadas.&lt;/p&gt;

&lt;p&gt;Esto dificulta el mantenimiento, ya que no queda claro qué hace cada módulo ni dónde debería ir cierta funcionalidad.&lt;br&gt;
El resultado es un sistema desorganizado, disperso y difícil de entender.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sistemas con Alta Cohesión y Alto Acoplamiento&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fue8lx5sn6o3msqq3tlwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fue8lx5sn6o3msqq3tlwl.png" alt="alta-cohesion-alto-acoplamiento" width="672" height="830"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En estos sistemas, todo está en un solo lugar: hay una única pieza que concentra muchas responsabilidades.&lt;br&gt;
Podemos decir que hay alta cohesión, porque las partes están alineadas semánticamente y sabemos claramente qué hace el módulo.&lt;/p&gt;

&lt;p&gt;Pero al mismo tiempo, está todo tan interconectado internamente, con tantos vínculos fuertes entre componentes, que cualquier cambio puede tener efectos colaterales no deseados.&lt;/p&gt;

&lt;p&gt;Además, como una sola unidad controla muchas cosas, el sistema depende demasiado de ese módulo central, lo que genera alto acoplamiento.&lt;br&gt;
Esto vuelve al sistema difícil de mantener, de testear y de escalar, incluso si su organización interna parece clara.&lt;/p&gt;

&lt;h3&gt;
  
  
  El Ideal
&lt;/h3&gt;

&lt;p&gt;sistemas con &lt;strong&gt;Bajo Acoplamiento y Alta Cohesión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6kmhiej9d0acdu2pxf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6kmhiej9d0acdu2pxf6.png" alt="bajo-acoplamiento-alta-cohesion" width="672" height="830"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto es lo que buscamos cuando intentamos construir un software bien diseñado.&lt;br&gt;
En este tipo de sistemas, los vínculos entre módulos son mínimos: cambiar uno por otro no representa una dificultad real. Incluso puede que algunos módulos ni siquiera se conozcan directamente, pero aun así colaboran para lograr un objetivo común.&lt;/p&gt;

&lt;p&gt;Además, cada módulo tiene una responsabilidad clara y coherente.&lt;br&gt;
Sabe lo que debe hacer y nada más, y todos sus elementos están alineados semánticamente con ese propósito.&lt;/p&gt;

&lt;p&gt;El resultado es un sistema flexible, comprensible y fácil de mantener, donde cada parte puede evolucionar sin romper el todo.&lt;/p&gt;




&lt;h2&gt;
  
  
  A modo de cierre
&lt;/h2&gt;

&lt;p&gt;Diseñar y modelar son dos caras de la misma moneda.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Modelamos para representar bien la realidad. Diseñamos para que esa representación funcione en el tiempo.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un buen modelo sin un buen diseño se desmorona al crecer.&lt;br&gt;&lt;br&gt;
Un buen diseño sin un buen modelo pierde el rumbo y no resuelve el problema correcto.&lt;/p&gt;

&lt;p&gt;En el día a día, muchas veces no los distinguimos claramente, y está bien: en la práctica se entrelazan. Pero entender sus diferencias nos ayuda a tomar mejores decisiones, escribir mejor código y construir sistemas más sólidos.&lt;/p&gt;

&lt;p&gt;El desafío no está solo en que el software funcione, sino en que &lt;strong&gt;pueda seguir funcionando bien a medida que cambia&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Y ahí es donde el diseño y el modelado cumplen su rol más importante.&lt;/p&gt;




&lt;p&gt;Gracias por llegar hasta el final.&lt;br&gt;&lt;br&gt;
Si te sirvió o te dejó pensando, me encantaría saber tu opinión en los comentarios.&lt;br&gt;&lt;br&gt;
Y si creés que puede ayudarle a alguien más, no dudes en compartirlo.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>arquitectura</category>
      <category>reactnative</category>
      <category>typescript</category>
    </item>
    <item>
      <title>🤔 ¿Por qué debes aprender diseño de software en el frontend?</title>
      <dc:creator>Nicolás Azuaga</dc:creator>
      <pubDate>Mon, 04 Aug 2025 12:49:28 +0000</pubDate>
      <link>https://dev.to/azunico/por-que-debes-aprender-diseno-de-software-en-el-frontend-2nod</link>
      <guid>https://dev.to/azunico/por-que-debes-aprender-diseno-de-software-en-el-frontend-2nod</guid>
      <description>&lt;h2&gt;
  
  
  Un poco de contexto
&lt;/h2&gt;

&lt;p&gt;En un contexto en el que la inteligencia artificial gana cada vez más terreno, si queremos destacarnos como desarrolladores —y que la IA sea un potenciador de nuestras habilidades y no “algo que nos va a quitar el trabajo”— es fundamental que dominemos las bases y fundamentos del diseño de software.&lt;/p&gt;

&lt;p&gt;En paralelo, vivimos una época de gran accesibilidad al desarrollo frontend, lo cual es algo positivo. Cada vez más personas ingresan al mundo del código gracias a bootcamps, cursos acelerados y plataformas accesibles.&lt;/p&gt;

&lt;p&gt;Pero esa misma accesibilidad también tiene un efecto colateral: muchas veces se aprende primero a usar un framework sin comprender las bases que sostienen un software bien diseñado. Y eso genera código que funciona... pero es difícil de mantener, escalar o probar.&lt;/p&gt;

&lt;p&gt;No es una crítica a quienes están empezando —todos arrancamos sin saber mucho, y eso está bien—, sino una invitación a ir más allá del “cómo se hace” y empezar a entender el “por qué se hace así”, y desarrollar criterio propio a la hora de programar.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Como dice el dicho: “Si todo lo que tenés es un martillo, todo te parece un clavo.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Y eso es justamente lo que pasa cuando lo único que conocemos son herramientas, como &lt;code&gt;useEffect&lt;/code&gt;, &lt;code&gt;Context&lt;/code&gt; o &lt;code&gt;Redux&lt;/code&gt;: intentamos resolver todo desde la UI, aunque no siempre sea el mejor lugar.&lt;/p&gt;

&lt;p&gt;Aunque el frontend se ubica en los extremos del sistema, es el punto de contacto crítico con el usuario. Una interacción fallida —como un botón que no responde— puede hacer irrelevante toda la lógica del backend. Esto no solo afecta la experiencia, sino que compromete la percepción de calidad del producto, generando pérdida de tiempo, dinero y confianza.&lt;/p&gt;

&lt;p&gt;Por eso es tan importante escribir código que no solo funcione, sino que pueda crecer, adaptarse y sostenerse a largo plazo. Conocer los principios que hacen que un software sea mantenible no es opcional: es parte del oficio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mi recorrido personal
&lt;/h2&gt;

&lt;p&gt;Después de varios años desarrollando aplicaciones frontend con React y React Native, me di cuenta de algo: cada vez que tenía que mantener una base de código antigua —incluso una que había escrito yo mismo meses atrás— me preguntaba:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Por qué este código tiene que ser tan complicado? ¿Qué hice? ¿Qué significa "data"? ¿Será que esta carrera es para mí?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;En mis comienzos como desarrollador frontend, me he encontrado con componentes con varias líneas de código, difíciles de entender y seguir. Cuando entregaba una nueva versión al equipo de QA con una nueva funcionalidad o fixes, siempre volvía a mí con nuevos bugs o “muertos vivos” que creía solucionados, pero que —por alguna extraña razón— reaparecían.&lt;/p&gt;

&lt;p&gt;Cansado de esa situación, pensé que tenía que haber una forma mejor de hacer las cosas. Intuía que debía haber una manera de escribir código con menos fricción. Fue entonces cuando comencé a buscar y descubrí un mundo de libros y conceptos como &lt;strong&gt;Patrones de Diseño&lt;/strong&gt;, principios &lt;strong&gt;SOLID&lt;/strong&gt;, &lt;strong&gt;Arquitectura Limpia&lt;/strong&gt; y &lt;strong&gt;Tests Unitarios&lt;/strong&gt; (¿y esto último con qué se come?).&lt;/p&gt;

&lt;p&gt;Entré al mundo de la informática sin una formación académica tradicional —sin carrera universitaria, más bien gracias a cursos, bootcamps y mucha perseverancia— y sentía que me faltaban ciertas bases. Pensaba que esas cosas “se enseñaban en la universidad”, y que por no haber pasado por ahí, me estaba perdiendo algo fundamental.&lt;/p&gt;

&lt;p&gt;Con el tiempo entendí que no era tan así. Muchos de esos contenidos &lt;strong&gt;no están tan presentes en el ámbito académico&lt;/strong&gt;, sino que hay que buscarlos por cuenta propia.&lt;/p&gt;

&lt;p&gt;Leí libros como &lt;em&gt;Clean Architecture&lt;/em&gt; de Robert C. Martin, y me sumergí en &lt;em&gt;Domain-Driven Design&lt;/em&gt; de Eric Evans. Aunque me abrieron la cabeza, también me dejaron con muchas preguntas:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Cómo aplico estos principios en una app frontend?
&lt;/li&gt;
&lt;li&gt;¿Qué sentido tiene hablar de entidades o casos de uso dentro de un componente de React?
&lt;/li&gt;
&lt;li&gt;¿Dónde termina el dominio y empieza la UI?
&lt;/li&gt;
&lt;li&gt;¿A qué llaman dominio?
&lt;/li&gt;
&lt;li&gt;¿Qué significa diseño de software?
&lt;/li&gt;
&lt;li&gt;¿Qué es un modelo y para qué sirve el modelado?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hace casi dos años decidí estudiar una tecnicatura en programación para cerrar esa etapa personal y sacarme el síndrome del impostor. La universidad me enseñó muchas cosas y me abrió aún más la mente, pero incluso al borde de graduarme, veo que estos temas específicos que quiero compartir con ustedes &lt;strong&gt;siguen sin divulgarse lo suficiente&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Por eso, esta serie es mi intento de acercarles, a mi manera y con lo que fui aprendiendo durante estos años, esos conceptos que considero clave para escribir mejor código en el frontend. No pretendo mostrar “la forma correcta”, sino divulgar ideas que puedan ser aplicadas &lt;strong&gt;según el contexto&lt;/strong&gt;, y no por dogma.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚩 ¿Te pasó esto?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;El código funciona, pero nadie quiere tocarlo.
&lt;/li&gt;
&lt;li&gt;Un feature nuevo termina rompiendo otros sin que te des cuenta.
&lt;/li&gt;
&lt;li&gt;Tenés lógica duplicada en distintos lugares de la app.
&lt;/li&gt;
&lt;li&gt;No sabés dónde poner cierta lógica, así que termina en &lt;code&gt;helpers.js&lt;/code&gt; o &lt;code&gt;utils.ts&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Funciones con muchos &lt;code&gt;ifs&lt;/code&gt; o &lt;code&gt;switches&lt;/code&gt; que se vuelven difíciles de seguir.
&lt;/li&gt;
&lt;li&gt;Querés aplicar pruebas unitarias, pero el código está tan acoplado que parece imposible.
&lt;/li&gt;
&lt;li&gt;No sabés cómo diseñar una app ni por dónde empezar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A mí también. Por eso, en esta serie de artículos que iré publicando, mi objetivo es acercarte conceptos que fui aprendiendo a lo largo de mi camino como desarrollador. Tal vez te sirvan y sumes herramientas a tu repertorio.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ Conclusión
&lt;/h3&gt;

&lt;p&gt;👉 &lt;strong&gt;¿Por qué deberías aprender diseño de software en el frontend?&lt;/strong&gt;&lt;br&gt;
Porque dominar el diseño de software te convierte en un mejor desarrollador. Te permite tomar decisiones más sólidas, escribir código que escala, colaborar mejor con tu equipo y aprovechar la IA como una verdadera extensión de tu capacidad técnica. No se trata solo de escribir código que funciona, sino de construir soluciones que perduran.&lt;/p&gt;




&lt;h2&gt;
  
  
  🙌 Gracias por estar acá
&lt;/h2&gt;

&lt;p&gt;Si te interesa el tema, o te sentís identificado con lo que conté, te invito a seguir la serie.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>arquitectura</category>
      <category>reactnative</category>
      <category>typescript</category>
    </item>
    <item>
      <title>✨ Prólogo — Cómo está construida esta serie de diseño de software en el frontend</title>
      <dc:creator>Nicolás Azuaga</dc:creator>
      <pubDate>Mon, 04 Aug 2025 12:28:49 +0000</pubDate>
      <link>https://dev.to/azunico/prologo-como-esta-construida-esta-serie-de-diseno-de-software-en-el-frontend-3kih</link>
      <guid>https://dev.to/azunico/prologo-como-esta-construida-esta-serie-de-diseno-de-software-en-el-frontend-3kih</guid>
      <description>&lt;p&gt;Esta serie es mi intento de acercarte conceptos clave de diseño y arquitectura de software aplicados al frontend, especialmente en contextos móviles con &lt;strong&gt;React Native&lt;/strong&gt;. Está pensada desde la práctica, con ejemplos concretos y una app didáctica para seguir paso a paso.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Tecnologías utilizadas
&lt;/h2&gt;

&lt;p&gt;La serie está basada en el siguiente stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React Native CLI&lt;/strong&gt; (no Expo)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TypeScript&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;React Navigation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;React Native Testing Library&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redux&lt;/strong&gt; para manejo de estado&lt;/li&gt;
&lt;li&gt;Librerías auxiliares según se necesiten&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Aclaración&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Si bien los ejemplos estarán orientados al frontend móvil, los conceptos pueden ser trasladados a otros tipos de aplicación, ya sea web o backend.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ⚛️ ¿Por qué con React Native CLI y TypeScript?
&lt;/h2&gt;

&lt;p&gt;Elegí React Native CLI porque es la herramienta con la que más experiencia tengo y me siento más cómodo. Además, usaré TypeScript para aprovechar sus ventajas en tipado estático, lo que ayuda a escribir código más seguro y mantenible.&lt;/p&gt;

&lt;p&gt;Noto que hay poco material en español sobre temas profundos de React Native combinados con TypeScript, y este es mi pequeño aporte.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧢 La app que vamos a construir
&lt;/h2&gt;

&lt;p&gt;Para mantener la serie divertida y cercana, vamos a desarrollar una app inspirada en el mundo &lt;strong&gt;Pokémon&lt;/strong&gt;, pensada desde el enfoque de un entrenador.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;App de Entrenador Pokémon&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La app incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lógica de captura de Pokémon&lt;/li&gt;
&lt;li&gt;Gestión del equipo (máximo de 6 Pokémon activos)&lt;/li&gt;
&lt;li&gt;Guardería para Pokémon extra&lt;/li&gt;
&lt;li&gt;Mochila con ítems (por ejemplo, Pokébolas)&lt;/li&gt;
&lt;li&gt;Tipos de Pokébolas y su uso en capturas&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esta app no es una Pokédex, sino una representación simplificada de la experiencia de un entrenador, lo que nos permite modelar entidades, casos de uso, dependencias y flujos reales sin caer en ejemplos artificiales.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Cómo seguir los ejemplos
&lt;/h2&gt;

&lt;p&gt;Voy a mantener un repositorio abierto con el código de la app:&lt;/p&gt;

&lt;p&gt;🔗 Repositorio en GitHub (próximamente)&lt;/p&gt;

&lt;p&gt;Cada capítulo de la serie incluirá ejemplos comentados y enlaces al código correspondiente. No necesitás conocimientos previos avanzados, pero se recomienda experiencia básica con React Native y TypeScript.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Enfoque de la serie
&lt;/h2&gt;

&lt;p&gt;La serie está enfocada en cómo implementar principios de diseño en el frontend y divulgar estas ideas para tenerlas como guía y referencia. &lt;strong&gt;No se trata de aplicarlas como un dogma ni como la única verdad&lt;/strong&gt;, sino de comprender que estos conceptos existen y pueden aplicarse según el contexto.&lt;/p&gt;

&lt;p&gt;Habrá veces en que la implementación se sentirá forzada o exagerada para el tamaño de la app, pero eso también es parte del ejercicio: &lt;strong&gt;nos sirve para ejemplificar y analizar los pros y contras de dichas implementaciones&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En particular, vamos a ver:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cómo aplicar &lt;strong&gt;principios SOLID&lt;/strong&gt; en React Native
&lt;/li&gt;
&lt;li&gt;Cómo estructurar una app usando &lt;strong&gt;Clean Architecture&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Qué significa &lt;strong&gt;Domain-Driven Design (DDD)&lt;/strong&gt; en el frontend
&lt;/li&gt;
&lt;li&gt;Patrones comunes y errores frecuentes en diseño
&lt;/li&gt;
&lt;li&gt;Cómo testear apps desde el dominio hacia la UI&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Índice general de la serie
&lt;/h2&gt;

&lt;p&gt;📌 &lt;a href="https://dev.to/azunico/serie-diseno-de-software-en-el-frontend-indice-1oj1"&gt;Serie: Diseño de Software en el Frontend — Índice&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Gracias por sumarte a esta serie 🙌&lt;br&gt;&lt;br&gt;
Te invito a seguirla, compartirla, y usarla como una guia o referencia para mejorar tu código y tus decisiones como desarrollador o desarrolladora.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>arquitectura</category>
      <category>reactnative</category>
      <category>typescript</category>
    </item>
    <item>
      <title>📚 Serie: Diseño de Software en el Frontend — Índice</title>
      <dc:creator>Nicolás Azuaga</dc:creator>
      <pubDate>Tue, 29 Jul 2025 05:14:49 +0000</pubDate>
      <link>https://dev.to/azunico/serie-diseno-de-software-en-el-frontend-indice-1oj1</link>
      <guid>https://dev.to/azunico/serie-diseno-de-software-en-el-frontend-indice-1oj1</guid>
      <description>&lt;p&gt;Bienvenidos al índice de la serie donde ire publicando artículos sobre diseño de software y arquitectura aplicado al frontend, con ejemplos prácticos en React Native y TypeScript.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lista de artículos publicados
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/azunico/por-que-debes-aprender-diseno-de-software-en-el-frontend-2nod"&gt;🤔 ¿Por qué debes aprender diseño de software en el frontend?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/azunico/diseno-y-modelado-son-lo-mismo-50n5"&gt;🧩 Diseño y Modelado: ¿son lo mismo?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Próximos artículos (en preparación) 🚧
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧠 Paradigmas de programación aplicados al diseño
&lt;/li&gt;
&lt;li&gt;🛠️ Principios de diseño vs patrones de diseño
&lt;/li&gt;
&lt;li&gt;☢️ Code Smells en el frontend
&lt;/li&gt;
&lt;li&gt;🧱 Principios SOLID con ejemplos prácticos en React Native
&lt;/li&gt;
&lt;li&gt;📦 Introducción a Domain-Driven Design (DDD)
&lt;/li&gt;
&lt;li&gt;🏗️ Arquitectura Limpia en React Native
&lt;/li&gt;
&lt;li&gt;🔷 Arquitectura Hexagonal en React Native&lt;/li&gt;
&lt;li&gt;🛑 Manejo de Errores como un Pro
&lt;/li&gt;
&lt;li&gt;✔️ Introducción a Test Driven Design (TDD)
&lt;/li&gt;
&lt;li&gt;📊 Diagramas UML: ¿Valen la pena?
&lt;/li&gt;
&lt;li&gt;🧪 Tests más robustos con el patrón Test API en React Native
&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Cada vez que publique un nuevo artículo, actualizaré este índice para facilitar la navegación por la serie, los títulos pueden llegar a cambiar ya que están en preparación.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;¡Gracias por seguir la serie!&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>arquitectura</category>
      <category>reactnative</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
