{"id":19057043,"url":"https://github.com/jaugustodev/clean-architecture","last_synced_at":"2026-05-12T04:30:17.291Z","repository":{"id":206255751,"uuid":"716162547","full_name":"augustodevjs/clean-architecture","owner":"augustodevjs","description":"Projeto de estudo sobre Clean Architecture","archived":false,"fork":false,"pushed_at":"2023-11-10T13:39:04.000Z","size":310,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-02T11:44:18.601Z","etag":null,"topics":["clean-architecture","ddd","e2e-tests","notification-pattern","presenters","tdd","use-case"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/augustodevjs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-08T15:10:10.000Z","updated_at":"2023-11-09T17:45:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"573fc1a9-34e6-423c-96fc-cdd47539b4c2","html_url":"https://github.com/augustodevjs/clean-architecture","commit_stats":null,"previous_names":["augustodevjs/clean-architecture"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augustodevjs%2Fclean-architecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augustodevjs%2Fclean-architecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augustodevjs%2Fclean-architecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/augustodevjs%2Fclean-architecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/augustodevjs","download_url":"https://codeload.github.com/augustodevjs/clean-architecture/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240113944,"owners_count":19749829,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clean-architecture","ddd","e2e-tests","notification-pattern","presenters","tdd","use-case"],"created_at":"2024-11-08T23:53:13.347Z","updated_at":"2026-05-12T04:30:17.127Z","avatar_url":"https://github.com/augustodevjs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Clean Architecture\n\n### Pontos importantes sobre arquitetura:\n\n- Formato que o software terá.\n- Divisão de componentes.\n- Comunicação entre componentes.\n- Uma boa arquitetura vai facilitar o processo de desenvolvimento deploy, operação e manutenção.\n\n### Objetivos de uma boa arquitetura:\n\n- O objetivo principal da arquitetura é dar suporte ao ciclo de vida do sistema. Uma boa arquitetura torna o sistema fácil de entender, fácil de desenvolver, fácil de manter e fácil de implantar. O objetivo final é otimizar o custo de vida útil do sistema e maximizar a produtividade do programador.\n\n### Regras vs Detalhes:\n\n- Regras de negócio trazem o real valor para o software.\n- Detalhes ajudam a suportar as regras.\n- Detalhes não devem impactar nas regras de negócio.\n- Frameworks, banco de dados, apis, não devem impactar as regras.\n\n### Use Cases:\n\n- Intenção\n- Clareza de cada comportamento do software\n\n### Use Cases - SRP\n\n- Temos a tendência de “reaproveitar” use cases por serem muitos parecidos.\n- Ex: Alterar vs Inserir. Ambos consultam se o registro existe, persistem dados. Mas, são Use Cases diferentes. Por que?\n- SRP (Single Responsibility Principle) ⇒ Mudam por razões diferentes.\n- Uses Cases contam uma história.\n\n### Limites arquiteturais:\n\n- Tudo que não impacta diretamente nas regras de negócio deve estar em um limite arquitetura diferente. Ex: não será o frontend, banco de dados que mudarão as regras de negócio da aplicação.\n\n### Input vs Output:\n\n- No final do dia, tudo se resume a um Input que retorna um Output.\n- Simplifique seu raciocínio ao criar um software sempre pensando em Input e Output.\n\n### DTO (Data Transfer Object):\n\n- Trafegar dados entre os limites arquiteturais.\n- Objeto anêmico, sem comportamento\n- Contém dados (Input ou Output)\n- Não possui regras de negócio\n- Não possui comportamento\n- Não faz nada, somente trafega dados.\n- API → CONTROLLER → USE CASE → ENTITY\n- Controller cria um DTO com os dados recebidos e envia para o Use Case\n- Use Case executa seu fluxo, pega o resultado, cria um DTO para output e retorna para o Controller.\n\n### Presenters:\n\n- Objetos de transformação.\n- Adequa o DTO de output no formato correto para entregar o resultado\n- Lembrando: Um sistema pode ter diversos formatos de entrega: ex: XML, JSON, Protobug, GraphQL, CLI, etc.\n\n### Entities:\n\n- Entities da Clean Architecture ≠ Entities do DDD\n- Clean Architecture define entity como camada de regras de negócio.\n- Elas se aplicam em qualquer situação.\n- Não há definição explicita de como criar as entities.\n- Normalmente utilizamos táticas do DDD.\n- Entities = Agregados + Domain Services.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaugustodev%2Fclean-architecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaugustodev%2Fclean-architecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaugustodev%2Fclean-architecture/lists"}