{"id":9897,"date":"2023-11-29T13:26:50","date_gmt":"2023-11-29T16:26:50","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?post_type=artigos&#038;p=9897"},"modified":"2023-12-26T15:56:52","modified_gmt":"2023-12-26T18:56:52","slug":"entidades-ubiquas","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/entidades-ubiquas\/","title":{"rendered":"Entidades Ub\u00edquas"},"content":{"rendered":"\n<p>No mundo do desenvolvimento de software, sempre buscamos pr\u00e1ticas que nos ajudem a compor um sistema de forma mais clara e eficiente. O <em>Domain-driven Design<\/em> (DDD) \u00e9 uma dessas pr\u00e1ticas que ganhou for\u00e7a por promover um design orientado ao neg\u00f3cio, mas ser\u00e1 que estamos aplicando seus princ\u00edpios corretamente? Muitas vezes, ca\u00edmos em armadilhas na tentativa de simplificar o complexo dom\u00ednio de neg\u00f3cios com o qual lidamos. Uma dessas armadilhas \u00e9 a infame pr\u00e1tica de criar entidades ub\u00edquas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O Anti-pattern Entidade Ub\u00edqua<\/h2>\n\n\n\n<p>Quando falamos de entidades ub\u00edquas, apontamos para um anti-pattern bastante recorrente: a utiliza\u00e7\u00e3o de uma \u00fanica entidade para modelar conceitos distintos, como pessoa f\u00edsica e pessoa jur\u00eddica, que podem assumir diferentes pap\u00e9is, como fornecedor ou cliente, dentro de um dom\u00ednio. Voc\u00ea j\u00e1 se deparou com uma entidade &#8220;pessoa&#8221; no seu modelo de dom\u00ednio que tentava ser a solu\u00e7\u00e3o para todos os problemas?<\/p>\n\n\n\n<p>Essa pr\u00e1tica usualmente surge da ideia de que podemos simplificar nosso modelo. Parece l\u00f3gico pensar que, se podemos unificar conceitos sob uma mesma entidade, estamos simplificando o design. No entanto, o que acontece, na maioria das vezes, \u00e9 o oposto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">As Consequ\u00eancias da Entidade Ub\u00edqua<\/h2>\n\n\n\n<p>O dom\u00ednio de neg\u00f3cios \u00e9 rico em varia\u00e7\u00f5es e detalhes. Quando tentamos generalizar demais, criando entidades ub\u00edquas, enfrentamos problemas como alto acoplamento e baixa coes\u00e3o. Essa escolha nos leva a ignorar as nuances da <em>linguagem ub\u00edqua<\/em>, ou seja, a linguagem comum e unificada que deve permeiar todas as partes do projeto e que reflete o dom\u00ednio do neg\u00f3cio em quest\u00e3o.<\/p>\n\n\n\n<p>Voc\u00ea j\u00e1 experimentou a dor de tentar ajustar comportamentos e fluxos de trabalho que naturalmente precisariam de conceitos separados, mas foram for\u00e7ados a caber dentro de uma \u00fanica abstra\u00e7\u00e3o? Por exemplo, a entidade &#8220;pessoa&#8221; acaba se tornando sobrecarregada com responsabilidades que poderiam ser melhor distribu\u00eddas entre entidades mais especializadas e alinhadas ao dom\u00ednio real.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como Evitar a Cria\u00e7\u00e3o de Entidades Ub\u00edquas?<\/h2>\n\n\n\n<p>A chave para evitar cair na armadilha da cria\u00e7\u00e3o de entidades ub\u00edquas \u00e9 manter-se fiel aos princ\u00edpios do DDD. Isso inclui:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Conversar com especialistas do dom\u00ednio para capturar a <em>linguagem ub\u00edqua<\/em> de formas mais aut\u00eanticas;<\/li>\n\n\n\n<li>Modelar o dom\u00ednio de forma a refletir as distin\u00e7\u00f5es e regras do neg\u00f3cio;<\/li>\n\n\n\n<li>Dividir responsabilidades entre diferentes entidades e objetos de valor quando apropriado;<\/li>\n\n\n\n<li>Refinar continuamente o modelo atrav\u00e9s de revis\u00f5es e feedbacks, reconhecendo que o dom\u00ednio de neg\u00f3cio pode evoluir com o tempo.<\/li>\n<\/ul>\n\n\n\n<p>Em um exemplo pr\u00e1tico, ao inv\u00e9s de uma entidade &#8216;Pessoa&#8217;, poder\u00edamos ter &#8216;Cliente&#8217; e &#8216;Fornecedor&#8217; como entidades separadas, com atributos e comportamentos espec\u00edficos para cada tipo de opera\u00e7\u00e3o no neg\u00f3cio. Isso permite manter a modelagem alinhada com as diferentes necessidades de cada parte do dom\u00ednio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>A modelagem de software orientada pelo dom\u00ednio de neg\u00f3cios \u00e9 uma ferramenta poderosa. No entanto, \u00e9 vital permanecer vigilante contra pr\u00e1ticas que inadvertidamente podem comprometer a qualidade do design do nosso software, como a tentativa de simplificar o complexo atrav\u00e9s de entidades ub\u00edquas. Atrav\u00e9s da compreens\u00e3o profunda do dom\u00ednio e da colabora\u00e7\u00e3o estreita com especialistas do neg\u00f3cio, podemos evitar esses anti-patterns e atingir uma modelagem que verdadeiramente serve \u00e0s necessidades do neg\u00f3cio.<\/p>\n\n\n\n<p>Voc\u00ea se identifica com esses desafios? J\u00e1 encontrou maneiras \u00fanicas de resolver problemas semelhantes no seu dom\u00ednio? Encorajo voc\u00ea a compartilhar suas experi\u00eancias como parte de nossa comunidade nos grupos de estudo e mentorias que ofere\u00e7o, onde se fomenta um di\u00e1logo aberto sobre as melhores pr\u00e1ticas em DDD.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Entidades ub\u00edquas s\u00e3o um anti-pattern comum quando mal aplicamos o DDD, tentando unificar conceitos distintos do dom\u00ednio.<\/li>\n\n\n\n<li>Essa pr\u00e1tica leva a alto acoplamento, baixa coes\u00e3o e desalinhamento com a linguagem ub\u00edqua do dom\u00ednio de neg\u00f3cios.<\/li>\n\n\n\n<li>Devemos nos ater aos princ\u00edpios do DDD, colaborando com especialistas do dom\u00ednio e revisando constantemente os modelos para evitar entidades ub\u00edquas e refletir fielmente o neg\u00f3cio.<\/li>\n<\/ol>\n","protected":false},"featured_media":9895,"parent":0,"template":"","cursos":[12],"class_list":["post-9897","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-ddd-do-jeito-certo"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/9897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/9895"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=9897"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=9897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}