{"id":6287,"date":"2023-07-12T09:59:17","date_gmt":"2023-07-12T12:59:17","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?p=6287"},"modified":"2023-10-21T21:34:20","modified_gmt":"2023-10-22T00:34:20","slug":"dominando-a-escalabilidade-integrando-ddd-clean-architecture-e-arquitetura-hexagonal","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/dominando-a-escalabilidade-integrando-ddd-clean-architecture-e-arquitetura-hexagonal\/","title":{"rendered":"Dominando a Escalabilidade: Integrando DDD, Clean Architecture e Arquitetura Hexagonal"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Domain-Driven Design (DDD)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Conceitos Fundamentais do DDD<\/h3>\n\n\n\n<p>O DDD \u00e9 uma abordagem de desenvolvimento que prioriza o dom\u00ednio do neg\u00f3cio. Esta t\u00e9cnica garante que o software desenvolvido reflita com precis\u00e3o as necessidades e complexidades do dom\u00ednio do neg\u00f3cio.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Benef\u00edcios do DDD<\/h3>\n\n\n\n<p>A principal vantagem do DDD \u00e9 sua capacidade de simplificar complexidades de neg\u00f3cios. Al\u00e9m disso, o DDD melhora a comunica\u00e7\u00e3o entre equipes t\u00e9cnicas e de neg\u00f3cios, o que resulta em software mais eficaz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Clean Architecture<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Conceitos Fundamentais da Clean Architecture<\/h3>\n\n\n\n<p>A <em>Clean Architecture<\/em>, proposta por Robert C. Martin, \u00e9 caracterizada por uma divis\u00e3o clara de responsabilidades entre os componentes do software. O foco est\u00e1 na separa\u00e7\u00e3o dos aspectos de neg\u00f3cios e infraestrutura, promovendo a independ\u00eancia de frameworks e bancos de dados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Benef\u00edcios da Clean Architecture<\/h3>\n\n\n\n<p>A <em>Clean Architecture<\/em> oferece a vantagem de um c\u00f3digo mais f\u00e1cil de manter e testar, al\u00e9m de permitir a substitui\u00e7\u00e3o de partes do sistema sem afetar o restante.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Arquitetura Hexagonal<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Conceitos Fundamentais da Arquitetura Hexagonal<\/h3>\n\n\n\n<p>A Arquitetura Hexagonal, ou <em>Ports and Adapters<\/em>, isola a l\u00f3gica de neg\u00f3cio das camadas externas do software, como interfaces de usu\u00e1rio e bancos de dados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Benef\u00edcios da Arquitetura Hexagonal<\/h3>\n\n\n\n<p>Essa abordagem permite uma maior flexibilidade, tornando os sistemas menos suscet\u00edveis a mudan\u00e7as em tecnologias externas e facilitando a manuten\u00e7\u00e3o e os testes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Integrando DDD, Clean Architecture e Arquitetura Hexagonal<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Como Integrar<\/h3>\n\n\n\n<p>A integra\u00e7\u00e3o dessas tr\u00eas t\u00e9cnicas n\u00e3o \u00e9 trivial e requer uma compreens\u00e3o profunda de cada uma delas. No entanto, a integra\u00e7\u00e3o proporciona um quadro que facilita a cria\u00e7\u00e3o de sistemas escal\u00e1veis, flex\u00edveis e de f\u00e1cil manuten\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Benef\u00edcios da Integra\u00e7\u00e3o<\/h3>\n\n\n\n<p>A integra\u00e7\u00e3o das tr\u00eas t\u00e9cnicas promove um sistema que \u00e9 adapt\u00e1vel, escal\u00e1vel, de f\u00e1cil manuten\u00e7\u00e3o e que reflete precisamente o dom\u00ednio do neg\u00f3cio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplos Pr\u00e1ticos<\/h2>\n\n\n\n<p>Aqui iremos detalhar exemplos reais da aplica\u00e7\u00e3o dessas t\u00e9cnicas integradas em projetos reais, evidenciando a teoria na pr\u00e1tica.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em C#<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">C#<\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Exemplo de implementa\u00e7\u00e3o do padr\u00e3o DDD, Clean Architecture e Arquitetura Hexagonal\n\n\/\/ Camada de Dom\u00ednio\npublic class Entidade\n{\n    public int Id { get; set; }\n    public string Nome { get; set; }\n}\n\n\/\/ Camada de Aplica\u00e7\u00e3o\npublic class Servico\n{\n    private Repositorio repositorio;\n\n    public Servico()\n    {\n        this.repositorio = new Repositorio();\n    }\n\n    public Entidade ObterEntidadePorId(int id)\n    {\n        return repositorio.ObterPorId(id);\n    }\n}\n\n\/\/ Camada de Infraestrutura\npublic class Repositorio\n{\n    public Entidade ObterPorId(int id)\n    {\n        \/\/ L\u00f3gica para obter a entidade do banco de dados\n        \/\/ ...\n    }\n}\n\n\/\/ Camada de Interface\npublic class API\n{\n    private Servico servico;\n\n    public API()\n    {\n        this.servico = new Servico();\n    }\n\n    public Entidade ObterEntidadePorId(int id)\n    {\n        return servico.ObterEntidadePorId(id);\n    }\n}\n\n\/\/ Exemplo de uso da API\nAPI api = new API();\nEntidade entidade = api.ObterEntidadePorId(1);\nConsole.WriteLine(entidade.Nome);\n\n\/\/ Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/ Exemplo de implementa\u00e7\u00e3o do padr\u00e3o DDD, Clean Architecture e Arquitetura Hexagonal<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Camada de Dom\u00ednio<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Entidade<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> Id <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">get;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">set;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> Nome <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">get;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">set;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Camada de Aplica\u00e7\u00e3o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Servico<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> Repositorio repositorio<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Servico<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">repositorio<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> Repositorio<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> Entidade <\/span><span style=\"color: #88C0D0\">ObterEntidadePorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> id<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">repositorio<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ObterPorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Camada de Infraestrutura<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Repositorio<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> Entidade <\/span><span style=\"color: #88C0D0\">ObterPorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> id<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ L\u00f3gica para obter a entidade do banco de dados<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Camada de Interface<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">API<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> Servico servico<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">API<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">servico<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> Servico<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> Entidade <\/span><span style=\"color: #88C0D0\">ObterEntidadePorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> id<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">servico<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ObterEntidadePorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Exemplo de uso da API<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">API api <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> API<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">Entidade entidade <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">api<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ObterEntidadePorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">Console<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">WriteLine<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">entidade<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Nome<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Neste exemplo em C#, temos uma implementa\u00e7\u00e3o semelhante aos exemplos anteriores em Python e Java. As camadas de Dom\u00ednio, Aplica\u00e7\u00e3o, Infraestrutura e Interface s\u00e3o definidas da mesma forma, com suas respectivas responsabilidades.<\/p>\n\n\n\n<p>O c\u00f3digo segue os princ\u00edpios do DDD, Clean Architecture e Arquitetura Hexagonal, mantendo a separa\u00e7\u00e3o de responsabilidades e a modularidade do sistema. Cada camada tem suas pr\u00f3prias classes e interfaces, permitindo a evolu\u00e7\u00e3o independente de cada uma delas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em Java<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Java<\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Exemplo de implementa\u00e7\u00e3o do padr\u00e3o DDD, Clean Architecture e Arquitetura Hexagonal\n\n\/\/ Camada de Dom\u00ednio\npublic class Entidade {\n    private int id;\n    private String nome;\n\n    public Entidade(int id, String nome) {\n        this.id = id;\n        this.nome = nome;\n    }\n\n    \/\/ Getters e Setters\n    \/\/ ...\n}\n\n\/\/ Camada de Aplica\u00e7\u00e3o\npublic class Servico {\n    private Repositorio repositorio;\n\n    public Servico() {\n        this.repositorio = new Repositorio();\n    }\n\n    public Entidade obterEntidadePorId(int id) {\n        return repositorio.obterPorId(id);\n    }\n}\n\n\/\/ Camada de Infraestrutura\npublic class Repositorio {\n    public Entidade obterPorId(int id) {\n        \/\/ L\u00f3gica para obter a entidade do banco de dados\n        \/\/ ...\n    }\n}\n\n\/\/ Camada de Interface\npublic class API {\n    private Servico servico;\n\n    public API() {\n        this.servico = new Servico();\n    }\n\n    public Entidade obterEntidadePorId(int id) {\n        return servico.obterEntidadePorId(id);\n    }\n}\n\n\/\/ Exemplo de uso da API\nAPI api = new API();\nEntidade entidade = api.obterEntidadePorId(1);\nSystem.out.println(entidade.getNome());\n\n\/\/ Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/ Exemplo de implementa\u00e7\u00e3o do padr\u00e3o DDD, Clean Architecture e Arquitetura Hexagonal<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Camada de Dom\u00ednio<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Entidade<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">nome<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Entidade<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">nome<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> id<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">nome<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> nome<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ Getters e Setters<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Camada de Aplica\u00e7\u00e3o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Servico<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Repositorio<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">repositorio<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Servico<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">repositorio<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Repositorio<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Entidade<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">obterEntidadePorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">repositorio<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">obterPorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Camada de Infraestrutura<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Repositorio<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Entidade<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">obterPorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ L\u00f3gica para obter a entidade do banco de dados<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Camada de Interface<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">API<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Servico<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">servico<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">API<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">this<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">servico<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Servico<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Entidade<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">obterEntidadePorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">servico<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">obterEntidadePorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Exemplo de uso da API<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">API<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">api<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">API<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">Entidade<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">entidade<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">api<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">obterEntidadePorId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">out<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">println<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">entidade<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getNome<\/span><span style=\"color: #ECEFF4\">())<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Neste exemplo em Java, temos uma implementa\u00e7\u00e3o similar ao exemplo anterior em Python, por\u00e9m utilizando a linguagem de programa\u00e7\u00e3o Java. As camadas de Dom\u00ednio, Aplica\u00e7\u00e3o, Infraestrutura e Interface s\u00e3o definidas da mesma forma, com suas respectivas responsabilidades.<\/p>\n\n\n\n<p>A estrutura\u00e7\u00e3o do c\u00f3digo segue os princ\u00edpios do DDD, Clean Architecture e Arquitetura Hexagonal, mantendo a separa\u00e7\u00e3o de responsabilidades e a modularidade do sistema. Cada camada tem suas pr\u00f3prias classes e interfaces, permitindo a evolu\u00e7\u00e3o independente de cada uma delas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em Python<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Python<\/span><span role=\"button\" tabindex=\"0\" data-code=\"# Exemplo de implementa\u00e7\u00e3o do padr\u00e3o DDD, Clean Architecture e Arquitetura Hexagonal\n\n# Camada de Dom\u00ednio\nclass Entidade:\n    def __init__(self, id, nome):\n        self.id = id\n        self.nome = nome\n\n# Camada de Aplica\u00e7\u00e3o\nclass Servico:\n    def __init__(self):\n        self.repositorio = Repositorio()\n\n    def obter_entidade_por_id(self, id):\n        return self.repositorio.obter_por_id(id)\n\n# Camada de Infraestrutura\nclass Repositorio:\n    def obter_por_id(self, id):\n        # L\u00f3gica para obter a entidade do banco de dados\n        # ...\n\n# Camada de Interface\nclass API:\n    def __init__(self):\n        self.servico = Servico()\n\n    def obter_entidade_por_id(self, id):\n        entidade = self.servico.obter_entidade_por_id(id)\n        # L\u00f3gica para exibir a entidade na interface\n        # ...\n\n# Exemplo de uso da API\napi = API()\nentidade = api.obter_entidade_por_id(1)\nprint(entidade.nome)\n\n#Fonte: ChatGPT\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #616E88\"># Exemplo de implementa\u00e7\u00e3o do padr\u00e3o DDD, Clean Architecture e Arquitetura Hexagonal<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Camada de Dom\u00ednio<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Entidade<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">__init__<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">nome<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">id <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">nome <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> nome<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Camada de Aplica\u00e7\u00e3o<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Servico<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">__init__<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">repositorio <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Repositorio<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">obter_entidade_por_id<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">repositorio<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">obter_por_id<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Camada de Infraestrutura<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Repositorio<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">obter_por_id<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #616E88\"># L\u00f3gica para obter a entidade do banco de dados<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #616E88\"># ...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Camada de Interface<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">API<\/span><span style=\"color: #ECEFF4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">__init__<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">servico <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Servico<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">def<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">obter_entidade_por_id<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        entidade <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">servico<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">obter_entidade_por_id<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #616E88\"># L\u00f3gica para exibir a entidade na interface<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #616E88\"># ...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"># Exemplo de uso da API<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">api <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">API<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">entidade <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> api<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">obter_entidade_por_id<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">entidade<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">nome<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">#Fonte: ChatGPT<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Neste exemplo, temos uma implementa\u00e7\u00e3o b\u00e1sica de um sistema que utiliza os princ\u00edpios do DDD, Clean Architecture e Arquitetura Hexagonal. A camada de Dom\u00ednio (Entidade) define a estrutura de dados principal, a camada de Aplica\u00e7\u00e3o (Servico) cont\u00e9m a l\u00f3gica de neg\u00f3cio e utiliza o Repositorio da camada de Infraestrutura para acessar os dados persistentes. A camada de Interface (API) \u00e9 respons\u00e1vel por fornecer uma interface para interagir com o sistema.<\/p>\n\n\n\n<p>Essa estrutura\u00e7\u00e3o permite uma separa\u00e7\u00e3o clara de responsabilidades, facilitando a manuten\u00e7\u00e3o e o teste do c\u00f3digo. Al\u00e9m disso, o uso de interfaces entre as camadas garante a flexibilidade e adaptabilidade do sistema, permitindo que cada camada possa evoluir independentemente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>A integra\u00e7\u00e3o do DDD, <em>Clean Architecture<\/em> e Arquitetura Hexagonal apresenta uma poderosa estrat\u00e9gia para dominar a escalabilidade em sistemas de software. Entretanto, \u00e9 fundamental uma compreens\u00e3o aprofundada de cada uma dessas t\u00e9cnicas para uma implementa\u00e7\u00e3o bem-sucedida.<\/p>\n\n\n\n<p>Esse conte\u00fado \u00e9 parte do material disponibilizado para os participantes do meu grupo de estudos de\u00a0<strong>DDD do Jeito Certo<\/strong>. Voc\u00ea quer participar desse grupo?\u00a0<a href=\"https:\/\/elemarjr.com\/clube-de-estudos\/ddd-do-jeito-certo\/\"><strong>Clique aqui e veja como funciona<\/strong><\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00favidas Frequentes<\/h2>\n\n\n\n<p><strong>Qual \u00e9 o principal benef\u00edcio da integra\u00e7\u00e3o dessas t\u00e9cnicas?<\/strong><br>A integra\u00e7\u00e3o promove um sistema que \u00e9 adapt\u00e1vel, escal\u00e1vel, de f\u00e1cil manuten\u00e7\u00e3o e que reflete precisamente o dom\u00ednio do neg\u00f3cio.<\/p>\n\n\n\n<p><strong>\u00c9 dif\u00edcil integrar o DDD, <em>Clean Architecture <\/em>e Arquitetura Hexagonal?<\/strong><br>A integra\u00e7\u00e3o requer uma compreens\u00e3o profunda de cada uma das t\u00e9cnicas. No entanto, o resultado \u00e9 um sistema de software robusto e escal\u00e1vel.<\/p>\n\n\n\n<p><strong>Qual \u00e9 a principal caracter\u00edstica do DDD?<\/strong><br>O DDD prioriza o dom\u00ednio do neg\u00f3cio, refletindo com precis\u00e3o as necessidades e complexidades do mesmo.<\/p>\n\n\n\n<p><strong>O que caracteriza a <em>Clean Architecture<\/em>?<\/strong><br>A <em>Clean Architecture<\/em> \u00e9 caracterizada pela separa\u00e7\u00e3o clara das responsabilidades dos componentes do software.<\/p>\n\n\n\n<p><strong>O que a Arquitetura Hexagonal oferece?<\/strong><br>A Arquitetura Hexagonal oferece flexibilidade, tornando os sistemas menos suscet\u00edveis a mudan\u00e7as em tecnologias externas e facilitando a manuten\u00e7\u00e3o e os testes.<\/p>\n","protected":false},"featured_media":6288,"parent":0,"template":"","cursos":[12],"class_list":["post-6287","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\/6287","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\/6288"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=6287"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=6287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}