{
  "version": "https://jsonfeed.org/version/1",
  "title": "marcelo.txt",
  "home_page_url": "https://blog.marcelomaga.space",
  "feed_url": "https://blog.marcelomaga.space/tag-arquitetura-de-software.json",
  "description": "Posts sobre software, sistemas e arquitetura.",
  "items": [
    {
      "id": "https://blog.marcelomaga.space/arquitetura-hexagonal.html",
      "url": "https://blog.marcelomaga.space/arquitetura-hexagonal.html",
      "title": "Arquitetura Hexagonal",
      "content_html": "<p>Um padrão de arquitetura que permite desacoplar a aplicação do ambiente, através do conceito de Portas e Adaptadores. E sua principal utilidade é solucionar o problema de Acoplamento das aplicações modernas, através do Design Pattern de Inversão de Dependência</p>\n<h2 id=\"objetivos\">Objetivos<a href=\"#objetivos\" aria-label=\"Link to heading 'Objetivos'\" data-heading-content=\"Objetivos\" class=\"anchor\"></a></h2>\n<p>Organizar o código em camadas, tal qual um cebola, cada camada tem sua responsabilidade.</p>\n<h2 id=\"camadas\">Camadas<a href=\"#camadas\" aria-label=\"Link to heading 'Camadas'\" data-heading-content=\"Camadas\" class=\"anchor\"></a></h2>\n<p>cada camada é completamente autocontida e isolada do mundo externo e se comunica com outras camadas a partir do conceito de porta e adaptadores.</p>\n<p>A ideia é criar portas de entrada, que são definidas por interfaces genéricas que precisam ser implementadas por adaptadores.</p>\n<h2 id=\"exemplo\">Exemplo<a href=\"#exemplo\" aria-label=\"Link to heading 'Exemplo'\" data-heading-content=\"Exemplo\" class=\"anchor\"></a></h2>\n<p>O carregador é um componente que precisa se adaptar o plug de entrada da tomada, que é a Regra de Negocio (Domínio).</p>\n<p>Um carregador brasileiro, implementa a tomada brasileira, mas caso preciso utilizar em uma tomara europeia, será necessário um adaptador</p>\n",
      "summary": "",
      "date_published": "2026-04-25T00:00:00-00:00",
      "image": "",
      "authors": [
        {
          "name": "Marcelo Magalhães",
          "url": "https://github.com/Marcelo-maga",
          "avatar": "https://github.com/Marcelo-maga.png"
        }
      ],
      "tags": [
        "arquitetura-de-software"
      ],
      "language": "pt-BR"
    },
    {
      "id": "https://blog.marcelomaga.space/arquitetura-limpa.html",
      "url": "https://blog.marcelomaga.space/arquitetura-limpa.html",
      "title": "Arquitetura Limpa",
      "content_html": "<p>A Arquitetura Limpa (Clean Architecture) é um padrão proposto por Robert Cecil Martin com o intuito de promover o <a href=\"solid.html\" data-wikilink=\"true\">SOLID</a>, reusabilidade de código e testabilidade.\nPode se encaixar nas Arquiteturas em Camadas.\n<figure><img src=\"midia/arquitetura-limpa-novo.svg\" alt=\"arquitetura-limpa-novo.svg\" /></figure></p>\n<h1 id=\"camadas\">Camadas<a href=\"#camadas\" aria-label=\"Link to heading 'Camadas'\" data-heading-content=\"Camadas\" class=\"anchor\"></a></h1>\n<p>Como dito anteriormente, pode ser considerada uma arquitetura em camadas, por cada coisa em sua composição ser separado e ter um responsabilidade única.</p>\n<h2 id=\"entidades-e-casos-de-usos\">Entidades e Casos de Usos<a href=\"#entidades-e-casos-de-usos\" aria-label=\"Link to heading 'Entidades e Casos de Usos'\" data-heading-content=\"Entidades e Casos de Usos\" class=\"anchor\"></a></h2>\n<p>Ao centro temos a camada de <strong>Entidades</strong>, responsável por conter toda a regra de negocio, são classes comuns entre sistema de varias empresas. com regras de negócio genéricas para aquela classe.</p>\n<p>Já os <strong>Casos de Uso</strong> definem regras de negocio especificas para o negocio de um sistema.</p>\n<h2 id=\"adaptadores\">Adaptadores<a href=\"#adaptadores\" aria-label=\"Link to heading 'Adaptadores'\" data-heading-content=\"Adaptadores\" class=\"anchor\"></a></h2>\n<p>Os adaptadores tem a responsabilidade de mediar a comunicação entre as camada externas com as camada internas. por exemplo, uma API REST, recebe a solicitação, converte para os objetos para o body desejado, e ao contrario, do body da persistência para JSON para a API responder.</p>\n<h2 id=\"frameworks-externos\">Frameworks Externos<a href=\"#frameworks-externos\" aria-label=\"Link to heading 'Frameworks Externos'\" data-heading-content=\"Frameworks Externos\" class=\"anchor\"></a></h2>\n<p>Essa camada é responsável por conter todos as classes de bibliotecas, frameworks e persistência em bancos de dados, provedores de pagamento, envio de notificação.</p>\n<blockquote>\n<p>Todos os detalhes ficam na camada de frameworks e drivers. A Web é um detalhe. O banco de dados é um detalhe. Mantemos essas tecnologias na camada mais externa porque é onde elas podem fazer menos mal.</p>\n</blockquote>\n<h2 id=\"regra-de-dependência\">Regra de Dependência<a href=\"#regra-de-dependência\" aria-label=\"Link to heading 'Regra de Dependência'\" data-heading-content=\"Regra de Dependência\" class=\"anchor\"></a></h2>\n<p>Classes X não devem conhecer nenhuma classe da camada Y, Uncle Bob diz:</p>\n<blockquote>\n<p>O nome de um elemento declarado em uma camada externa não deve ser mencionado pelo código de uma camada interna. Isso inclui funções, classes, variáveis e qualquer outro elemento de código.</p>\n</blockquote>\n<p>Dessa maneira as camadas internas são menos modificadas.</p>\n<p>A Regra de Dependência garante que Entidades e Casos de Usos são classes limpas e análoga a tecnologia (Framework) e serviços externos.</p>\n<h2 id=\"invertendo-o-fluxo-de-controle\">Invertendo o Fluxo de Controle<a href=\"#invertendo-o-fluxo-de-controle\" aria-label=\"Link to heading 'Invertendo o Fluxo de Controle'\" data-heading-content=\"Invertendo o Fluxo de Controle\" class=\"anchor\"></a></h2>\n<p>Uma camada externa Y pode criar um objeto da camada X e utilizar os métodos\nEm alguns casos é possível uma classe mais interna utilizar classes de uma camada mais externa</p>\n",
      "summary": "",
      "date_published": "2026-04-25T00:00:00-00:00",
      "image": "midia/arquitetura-limpa-novo.svg",
      "authors": [
        {
          "name": "Marcelo Magalhães",
          "url": "https://github.com/Marcelo-maga",
          "avatar": "https://github.com/Marcelo-maga.png"
        }
      ],
      "tags": [
        "arquitetura-de-software"
      ],
      "language": "pt-BR"
    },
    {
      "id": "https://blog.marcelomaga.space/arquitetura-de-software.html",
      "url": "https://blog.marcelomaga.space/arquitetura-de-software.html",
      "title": "Arquitetura de Software",
      "content_html": "<p>Micro-serviços\nArquitetura Orientada a Eventos\nArquiteturas Monolíticas\nMensageria\nTécnicas de Cache\nArquitetura Hexagonal</p>\n",
      "summary": "",
      "date_published": "2026-04-25T00:00:00-00:00",
      "image": "",
      "authors": [
        {
          "name": "Marcelo Magalhães",
          "url": "https://github.com/Marcelo-maga",
          "avatar": "https://github.com/Marcelo-maga.png"
        }
      ],
      "tags": [
        "arquitetura-de-software"
      ],
      "language": "pt-BR"
    },
    {
      "id": "https://blog.marcelomaga.space/design-orientado-a-tipos.html",
      "url": "https://blog.marcelomaga.space/design-orientado-a-tipos.html",
      "title": "Design Orientado a Tipos",
      "content_html": "<p><a href=\"https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/\">https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/</a></p>\n",
      "summary": "",
      "date_published": "2026-04-25T00:00:00-00:00",
      "image": "",
      "authors": [
        {
          "name": "Marcelo Magalhães",
          "url": "https://github.com/Marcelo-maga",
          "avatar": "https://github.com/Marcelo-maga.png"
        }
      ],
      "tags": [
        "arquitetura-de-software"
      ],
      "language": "pt-BR"
    }
  ]
}