<?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: Guille Granado</title>
    <description>The latest articles on DEV Community by Guille Granado (@ggguille).</description>
    <link>https://dev.to/ggguille</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%2F99567%2Fd109e634-b80f-4129-a995-ffb0376fe1d3.jpg</url>
      <title>DEV Community: Guille Granado</title>
      <link>https://dev.to/ggguille</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ggguille"/>
    <language>en</language>
    <item>
      <title>Destilando el dominio de negocio</title>
      <dc:creator>Guille Granado</dc:creator>
      <pubDate>Sat, 10 May 2025 16:12:12 +0000</pubDate>
      <link>https://dev.to/ggguille/destilando-el-dominio-de-negocio-4b3e</link>
      <guid>https://dev.to/ggguille/destilando-el-dominio-de-negocio-4b3e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;En el &lt;a href="https://dev.to/ggguille/diseno-de-productos-de-software-1fc3"&gt;articulo anterior&lt;/a&gt; estuve comentando sobre como enfocar el diseño de software desde &lt;strong&gt;Domain Driven Design (DDD)&lt;/strong&gt;. Aquí voy a profundizar un poco mas en su parte estratégica&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Como ya mencionamos el objetivo de la parte estratégica se centra en comprender el negocio.&lt;/p&gt;

&lt;p&gt;Para esto DDD define los siguientes conceptos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dominio: El área de conocimiento o actividad empresarial a la que se aplica el software.&lt;/li&gt;
&lt;li&gt;Contexto Delimitado (Bounded Context): Límite semántico alrededor de una parte del dominio, donde un modelo particular tiene sentido.&lt;/li&gt;
&lt;li&gt;Lenguaje Ubicuo (Ubiquitous Language): Un lenguaje común compartido por los expertos del dominio y los desarrolladores para describir el dominio.&lt;/li&gt;
&lt;li&gt;Mapas de Contexto (Context Maps): Las relaciones entre los diferentes contextos delimitados.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Descubrimiento
&lt;/h2&gt;

&lt;p&gt;El objetivo de esta fase es entender cómo funciona el negocio en su conjunto, descubrir el modelo mental de los expertos, identificar &lt;strong&gt;Bounded Contexts&lt;/strong&gt; y sus relaciones. Y con esto crear una visión compartida entre técnicos y negocio.&lt;/p&gt;

&lt;p&gt;Para conseguirlo tenemos que reunirnos con los expertos de negocio y entender como funciona y leer la documentación disponible.&lt;/p&gt;

&lt;p&gt;Existe una herramienta, llamada &lt;strong&gt;Event Storming&lt;/strong&gt;, muy útil que puede ayudar a entender el dominio, alinear todas las partes y tener un diagrama del dominio que luego se puede usar como referencia.&lt;/p&gt;

&lt;p&gt;Una vez tenemos el &lt;strong&gt;Dominio&lt;/strong&gt; y los &lt;strong&gt;Bounded Contexts&lt;/strong&gt; tendremos mucho vocabulario que se ha usado durante todo el proceso.&lt;br&gt;
Esto es el &lt;strong&gt;Ubiquitous Language&lt;/strong&gt; y todas las partes deberán usarlo en todas las fases para evitar confusión.&lt;/p&gt;

&lt;p&gt;Se creará un glosario o documento compartido donde se definirá todo este &lt;strong&gt;Ubiquitous Language&lt;/strong&gt; junto con el contexto en el que pertenece.&lt;/p&gt;

&lt;p&gt;Con los &lt;strong&gt;Bounded Context&lt;/strong&gt; el siguiente paso es definir como se van a relacionar. Es el momento de definir los &lt;strong&gt;Context Maps&lt;/strong&gt;.&lt;br&gt;
Aquí tenemos diferentes tipos de relaciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared Kernel&lt;/strong&gt;: Relación cooperativa entre dos contextos que comparten una parte del modelo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer–Supplier&lt;/strong&gt;: Un contexto (Customer) depende de otro (Supplier), que le provee un modelo o servicio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conformist&lt;/strong&gt;: El contexto dependiente adopta el modelo del proveedor sin capacidad de influir en él.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anticorruption Layer (ACL)&lt;/strong&gt;: El contexto receptor se protege de otro contexto mediante una capa de traducción.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Host Service (OHS)&lt;/strong&gt;: Un contexto expone su funcionalidad a otros mediante una interfaz pública bien definida.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Published Language&lt;/strong&gt;: Un contexto publica un lenguaje de integración estándar para facilitar el consumo externo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate Ways&lt;/strong&gt;: Dos contextos no necesitan coordinarse ni integrarse. Viven aislados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partnership&lt;/strong&gt;: Dos contextos colaboran estrechamente con responsabilidad compartida.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Definir los Bounded Contexts correctamente es desafiante y muy importante ya que va a afectar todo el diseño.&lt;br&gt;
Aquí algunos tips que pueden ayudar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hacer la fase de descubrimiento con stakeholders es clave&lt;/li&gt;
&lt;li&gt;Detectar diferencias en el lenguaje utilizado por cada área (Ubiquitous Language + Bounded Contexts)&lt;/li&gt;
&lt;li&gt;Validar hipótesis de contextos con ejemplos reales del negocio&lt;/li&gt;
&lt;li&gt;Usar Context Mapping para definir relaciones explícitas&lt;/li&gt;
&lt;li&gt;Incluir tanto al negocio como al equipo técnico en el diseño&lt;/li&gt;
&lt;li&gt;No obsesionarse con microservicios = contextos (no es lo mismo)&lt;/li&gt;
&lt;li&gt;Refactorizar contextos si el modelo evoluciona (¡están vivos!)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Diseño
&lt;/h2&gt;

&lt;p&gt;En esta fase nos centramos en diseñar el modelo de dominio detallado dentro de cada Bounded Context, traducir lo que hace el negocio en comportamientos del sistema.&lt;/p&gt;

&lt;p&gt;Se preparar todo para implementar: entidades, agregados, eventos, comandos, etc.&lt;/p&gt;

&lt;p&gt;Con esto estaremos listos para la parte táctica y empezar la implementación.&lt;/p&gt;

&lt;h2&gt;
  
  
  Opinión personal
&lt;/h2&gt;

&lt;p&gt;Nunca he trabajado en una empresa con un proceso realmente riguroso para documentar esta parte estratégica, o al menos, no he estado involucrado en esas fases.&lt;/p&gt;

&lt;p&gt;Lo que sí he visto, una y otra vez, es que cuando estas etapas no se hacen bien, con el tiempo —o con la llegada de nuevas personas al equipo— vuelven la confusión y los errores sobre el dominio y sus contextos.&lt;/p&gt;

&lt;p&gt;Contar con glosarios y diagramas generados durante el Event Storming ayuda mucho a compartir una visión común y tener una referencia clara y accesible en todo momento.&lt;/p&gt;

&lt;p&gt;Ahora bien, es importante entender que el dominio evoluciona, y su documentación debe evolucionar con él. Eso implica un trabajo constante de mantenimiento. Tal vez por eso no se documenta tanto como se debería: porque una documentación desactualizada puede ser tan problemática como no tener ninguna.&lt;/p&gt;

&lt;p&gt;Lo que sí consideraría imprescindible es involucrar a los stakeholders en todo el proceso, documentando todo lo posible para contar con un lugar común de consenso y consulta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.domainlanguage.com/ddd/reference/" rel="noopener noreferrer"&gt;DDD reference&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.eventstorming.com/" rel="noopener noreferrer"&gt;Event Storming&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ddd-crew/eventstorming-glossary-cheat-sheet" rel="noopener noreferrer"&gt;Event Storming Glossary Cheat Sheet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://martinfowler.com/bliki/BoundedContext.html" rel="noopener noreferrer"&gt;Bounded Contexts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Herramienta que puede ser útil para definir los Bounded Contexts. &lt;br&gt;
&lt;a href="https://github.com/ddd-crew/bounded-context-canvas" rel="noopener noreferrer"&gt;Bounded Context Canvas&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ddd-crew/context-mapping" rel="noopener noreferrer"&gt;Context Mapping&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ddd</category>
      <category>softwaredevelopment</category>
      <category>spanish</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Diseño de productos de software</title>
      <dc:creator>Guille Granado</dc:creator>
      <pubDate>Sun, 09 Mar 2025 16:49:23 +0000</pubDate>
      <link>https://dev.to/ggguille/diseno-de-productos-de-software-1fc3</link>
      <guid>https://dev.to/ggguille/diseno-de-productos-de-software-1fc3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;En este articulo quiero mostrar como veo el diseño de software, algo que vas mas allá de la parte de programar. &lt;br&gt;
Compartiré mi opinión y mis referencias&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Muchas veces cuando hablamos de diseño de software nos vamos directamente a la parte tecnica.&lt;br&gt;
Que stack utilizar, que arquitectura implementar...Cuando quise mejorar como desarrollaba software empecé por la esta parte.&lt;br&gt;
Libros como &lt;a href="https://www.amazon.es/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882" rel="noopener noreferrer"&gt;Clean Code&lt;/a&gt;, &lt;a href="https://www.amazon.es/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164" rel="noopener noreferrer"&gt;Clean Architecture&lt;/a&gt; o los principios &lt;a href="https://es.wikipedia.org/wiki/SOLID" rel="noopener noreferrer"&gt;SOLID&lt;/a&gt; me dieron la base.&lt;/p&gt;

&lt;p&gt;Pero creo que el diseño de software va mas allá de eso y cuando me leí los libros &lt;a href="https://www.amazon.es/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215" rel="noopener noreferrer"&gt;azul&lt;/a&gt; y &lt;a href="https://www.amazon.es/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577" rel="noopener noreferrer"&gt;rojo&lt;/a&gt; de Domain-Driven Design me quedo bastante claro.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domain-Driven Design
&lt;/h2&gt;

&lt;p&gt;Es un enfoque de trabajo donde el foco principal es el dominio de negocio.&lt;br&gt;
Segun esto, el entendimiento entre la parte de negocio y la parte técnica es crucial para que un producto salga adelante con exito.&lt;/p&gt;

&lt;p&gt;Para esto se pueden definir una serie de principios que luego se aplican en dos partes: estrategica y tactica.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principios
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hacer lo implicito, explicito. Evitar la ambigüedad &lt;/li&gt;
&lt;li&gt;Crear un lenguaje común entre todos los involucrados en el proyecto&lt;/li&gt;
&lt;li&gt;Mantener una actitud de aprendizaje continuo, el dominio no es estático y siempre hay cosas por aprender o mejorar&lt;/li&gt;
&lt;li&gt;Explora diferentes modelos del dominio, no te quedes con la primera idea&lt;/li&gt;
&lt;li&gt;Focalizarse en escenarios concretos. Expón tus modelos a esos escenarios&lt;/li&gt;
&lt;li&gt;Diseño evolutivo. Como el dominio no es estatico y el diseño es un reflejo del mismo, este cambiará con el. Mantener un ciclo constante de prueba y validación te va a ayudar&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Parte estratégica
&lt;/h3&gt;

&lt;p&gt;Se centra en comprender el negocio y definir el contexto en el que opera el software. Esto incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dominio: El área de conocimiento o actividad empresarial a la que se aplica el software.&lt;/li&gt;
&lt;li&gt;Contexto Delimitado (Bounded Context): Límite semántico alrededor de una parte del dominio, donde un modelo particular tiene sentido.&lt;/li&gt;
&lt;li&gt;Lenguaje Ubicuo (Ubiquitous Language): Un lenguaje común compartido por los expertos del dominio y los desarrolladores para describir el dominio.&lt;/li&gt;
&lt;li&gt;Mapas de Contexto (Context Maps): Las relaciones entre los diferentes contextos delimitados.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Parte táctica
&lt;/h3&gt;

&lt;p&gt;Esta centrado mas en diseñar e implementar el software utilizando patrones y prácticas específicas. Esto incluye:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entidades (Entities): Objetos con identidad única y ciclo de vida.&lt;/li&gt;
&lt;li&gt;Objetos de Valor (Value Objects): Objetos inmutables que representan conceptos del dominio.&lt;/li&gt;
&lt;li&gt;Servicios de Dominio (Domain Services): Operaciones que no encajan naturalmente en entidades u objetos de valor.&lt;/li&gt;
&lt;li&gt;Agregados (Aggregates): Clústers de objetos que se tratan como una sola unidad para la consistencia de datos.&lt;/li&gt;
&lt;li&gt;Repositorios (Repositories): Mecanismos para persistir y recuperar agregados.&lt;/li&gt;
&lt;li&gt;Eventos de Dominio (Domain Events): Registros de cosas que sucedieron en el dominio.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Opinión personal
&lt;/h2&gt;

&lt;p&gt;A grandes rasgos este es el enfoque que prefiero dar cuando diseño software.&lt;br&gt;
La implementacion de la parte tactica puede variar dependiendo de su complejidad o si tienes un enfoque mas funcional u orientado a objetos a la hora de desarrollar pero &lt;u&gt;la parte estrategica es vital&lt;/u&gt;.&lt;/p&gt;

&lt;p&gt;Por ultimo, se que muchos ven este enfoque valido solamente para proyectos complejos pero en mi opinion la complejidad solo te obliga a ser mas metódico, los principios se pueden aplicar y van a aportar beneficios en cualquier proyecto. &lt;/p&gt;

&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;p&gt;Voy a dejar más contenido sobre el tema. Aparte de los libros mencionados que recomiendo muchísimo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.domainlanguage.com/ddd/reference/" rel="noopener noreferrer"&gt;DDD reference&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ddd-crew" rel="noopener noreferrer"&gt;DDD Crew&lt;/a&gt; repositorio de github con mucho contenido relevante para DDD&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dddeurope.com/" rel="noopener noreferrer"&gt;Domain-Driven Design Europe&lt;/a&gt; organizan conferencias cada año sobre DDD y su canal de youtube tiene videos muy interesantes&lt;/p&gt;

&lt;p&gt;Cualquier libro de la serie &lt;a href="https://www.amazon.com/Addison-Wesley-Signature-Series-%2528Vernon%2529-2-book-series/dp/B09B511D47?ref=dbs_m_mng_rwt_0000_ext&amp;amp;dplnkId=4cdd0495-00e8-4d5e-ac70-e8b7e6fb3f1a" rel="noopener noreferrer"&gt;Addison Wesley Signature&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ddd</category>
      <category>softwaredevelopment</category>
      <category>spanish</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Hola mundo</title>
      <dc:creator>Guille Granado</dc:creator>
      <pubDate>Sun, 02 Feb 2025 16:47:17 +0000</pubDate>
      <link>https://dev.to/ggguille/hola-mundo-na4</link>
      <guid>https://dev.to/ggguille/hola-mundo-na4</guid>
      <description>&lt;p&gt;Después de tanto tiempo leyendo contenido en esta plataforma y pensarlo mil veces, por fin me he decidido a intentar aportar mi parte aquí.&lt;/p&gt;

&lt;p&gt;Soy Guille, desarrollador de software con mas de 10 años de experiencia. &lt;br&gt;
Durante este tiempo he tenido la suerte de involucrarme en una buena variedad de proyectos y tecnologías.&lt;br&gt;
Esto me hace un perfil mas generalista y, aunque tengo tecnologías en las que me siento mas cómodo soy capaz de adaptarme a diferentes proyectos y equipos. &lt;/p&gt;

&lt;p&gt;Mi idea con estos posts es intentar compartir lo que hago en el desarrollo de software. &lt;br&gt;
Espero coger el compromiso de ir publicando.&lt;/p&gt;

&lt;p&gt;Voy a publicar en español ya que es mi idioma materno y me siento mas cómodo aunque casi toda la información que consumo, y seguramente la que enlace aquí, es en ingles.&lt;/p&gt;

&lt;p&gt;No quiero alargarlo mucho, ni si quiera me he preparado este post. Solo me he centrado en publicarlo.&lt;/p&gt;

&lt;p&gt;Creo de verdad que me puede venir muy bien y si además le resulta de utilidad a alguien pues mejor que mejor.&lt;/p&gt;

&lt;p&gt;Saludos&lt;/p&gt;

</description>
      <category>welcome</category>
      <category>firstpost</category>
      <category>spanish</category>
    </item>
  </channel>
</rss>
