SlideShare uma empresa Scribd logo
O que é Clean
Architecture?
→ Independente de frameworks
→ Testável
→ Independente de UI
→ Independente de Database
→ Independente qualquer agente externo
Divide nosso código em 4
camadas
→ Entities: representam as entidades das regras de
negócio
→ Use Cases: as regras de negócio da aplicação
→ Controller: adaptam e convertem os dados do
formato usado pelas entidades e use cases para
agentes externos como bancos de dados , web,
etc
→ Framework & Driver: frameworks e ferramentas
como bancos de dados, frameworks web, etc
Clean architecture em Go
No pacote entity estão nossas entidades
No arquivo interface.go temos a definição das
interfaces dos Use Case e repositório, onde a
entidade vai ser armazenada
O service.go é a implementação dos Use Case
Nos arquivos repository_inmem.go e
repository_mongodb.go temos implementações da
interface que define um repositório, onde as
entidades são armazenadas. Neste caso o
repositório representa parte da camada Framework
& Driver
No diretório api temos a implementação da camada
Controller e também de mais uma parte da camada
Framework & Driver, nos handlers
No trecho a seguir, do api/main.go podemos ver
como usar o serviço
Podemos facilmente testar nossos pacotes, camada
a camada
pkg/user/service_test.go
api/handler/user_test.go
Perguntas
http://eltonminetto.net
@eminetto
http://asemanago.com.br

Mais conteúdo relacionado

Mais procurados

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Zahra Heydari
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
Oğuzhan Soykan
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on Android
Outware Mobile
 
Express JS
Express JSExpress JS
Express JS
Designveloper
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
Bruno Catão
 
One Size Doesn't Fit All: The New Database Revolution
One Size Doesn't Fit All: The New Database RevolutionOne Size Doesn't Fit All: The New Database Revolution
One Size Doesn't Fit All: The New Database Revolution
mark madsen
 
Clean Architecture Applications in Python
Clean Architecture Applications in PythonClean Architecture Applications in Python
Clean Architecture Applications in Python
Subhash Bhushan
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지YoungSu Son
 
The Clean Architecture
The Clean ArchitectureThe Clean Architecture
The Clean Architecture
Dmytro Turskyi
 
Docker Container Introduction
Docker Container IntroductionDocker Container Introduction
Docker Container Introduction
Innfinision Cloud and BigData Solutions
 
DevOps introduction
DevOps introductionDevOps introduction
DevOps introduction
Mettje Heegstra
 
Testing with Express, Mocha & Chai
Testing with Express, Mocha & ChaiTesting with Express, Mocha & Chai
Testing with Express, Mocha & Chai
Joerg Henning
 
Git - Fluxo do Versionamento adotado
Git - Fluxo do Versionamento adotadoGit - Fluxo do Versionamento adotado
Git - Fluxo do Versionamento adotado
William Lima
 
Action Jackson! Effective JSON processing in Spring Boot Applications
Action Jackson! Effective JSON processing in Spring Boot ApplicationsAction Jackson! Effective JSON processing in Spring Boot Applications
Action Jackson! Effective JSON processing in Spring Boot Applications
Joris Kuipers
 
Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot frameworkgilleslenfant
 
Hibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance TechniquesHibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance Techniques
Brett Meyer
 
Angular overview
Angular overviewAngular overview
Angular overview
Thanvilahari
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017
Docker, Inc.
 
Docker containers
Docker containersDocker containers
Docker containers
Pau López
 
TypeScript VS JavaScript.pptx
TypeScript VS JavaScript.pptxTypeScript VS JavaScript.pptx
TypeScript VS JavaScript.pptx
Albiorix Technology
 

Mais procurados (20)

Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on Android
 
Express JS
Express JSExpress JS
Express JS
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
One Size Doesn't Fit All: The New Database Revolution
One Size Doesn't Fit All: The New Database RevolutionOne Size Doesn't Fit All: The New Database Revolution
One Size Doesn't Fit All: The New Database Revolution
 
Clean Architecture Applications in Python
Clean Architecture Applications in PythonClean Architecture Applications in Python
Clean Architecture Applications in Python
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지
 
The Clean Architecture
The Clean ArchitectureThe Clean Architecture
The Clean Architecture
 
Docker Container Introduction
Docker Container IntroductionDocker Container Introduction
Docker Container Introduction
 
DevOps introduction
DevOps introductionDevOps introduction
DevOps introduction
 
Testing with Express, Mocha & Chai
Testing with Express, Mocha & ChaiTesting with Express, Mocha & Chai
Testing with Express, Mocha & Chai
 
Git - Fluxo do Versionamento adotado
Git - Fluxo do Versionamento adotadoGit - Fluxo do Versionamento adotado
Git - Fluxo do Versionamento adotado
 
Action Jackson! Effective JSON processing in Spring Boot Applications
Action Jackson! Effective JSON processing in Spring Boot ApplicationsAction Jackson! Effective JSON processing in Spring Boot Applications
Action Jackson! Effective JSON processing in Spring Boot Applications
 
Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot framework
 
Hibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance TechniquesHibernate ORM: Tips, Tricks, and Performance Techniques
Hibernate ORM: Tips, Tricks, and Performance Techniques
 
Angular overview
Angular overviewAngular overview
Angular overview
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017
 
Docker containers
Docker containersDocker containers
Docker containers
 
TypeScript VS JavaScript.pptx
TypeScript VS JavaScript.pptxTypeScript VS JavaScript.pptx
TypeScript VS JavaScript.pptx
 

Semelhante a Clean Architecture in Golang

Clean Architecture em PHP
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHP
Elton Minetto
 
Clean architecture em Go - v2
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2
Elton Minetto
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
tdc-globalcode
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
Elton Minetto
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
Regis Magalhães
 
PHP nas Nuvens
PHP nas NuvensPHP nas Nuvens
PHP nas Nuvens
Marcos Bezerra
 
Corbawebserves
CorbawebservesCorbawebserves
Corbawebserves
Portal_do_Estudante_SD
 
EJB
EJBEJB
Beehive - Overview
Beehive - OverviewBeehive - Overview
Beehive - Overview
Thiago Gutierri
 
Palestra
PalestraPalestra
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
Ruben Marcus Luz Paschoarelli
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!
Isaac de Souza
 
Clean Architecture - Elton Minetto
Clean Architecture - Elton MinettoClean Architecture - Elton Minetto
Clean Architecture - Elton Minetto
iMasters
 
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
tdc-globalcode
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018
Graziella Bonizi
 
Apresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity FrameworkApresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity Framework
Matteus Barbosa
 
ZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoZF Básico - 1. Introdução
ZF Básico - 1. Introdução
Marcos Bezerra
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Luiz Costa
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
Domingos Teruel
 
A Linguagem Php
A Linguagem PhpA Linguagem Php
A Linguagem Php
Joaquim Vieira
 

Semelhante a Clean Architecture in Golang (20)

Clean Architecture em PHP
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHP
 
Clean architecture em Go - v2
Clean architecture em Go - v2Clean architecture em Go - v2
Clean architecture em Go - v2
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
PHP nas Nuvens
PHP nas NuvensPHP nas Nuvens
PHP nas Nuvens
 
Corbawebserves
CorbawebservesCorbawebserves
Corbawebserves
 
EJB
EJBEJB
EJB
 
Beehive - Overview
Beehive - OverviewBeehive - Overview
Beehive - Overview
 
Palestra
PalestraPalestra
Palestra
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!
 
Clean Architecture - Elton Minetto
Clean Architecture - Elton MinettoClean Architecture - Elton Minetto
Clean Architecture - Elton Minetto
 
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018
 
Apresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity FrameworkApresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity Framework
 
ZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoZF Básico - 1. Introdução
ZF Básico - 1. Introdução
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
 
A Linguagem Php
A Linguagem PhpA Linguagem Php
A Linguagem Php
 

Mais de Elton Minetto

Go e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outroGo e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outro
Elton Minetto
 
Object Calisthenics em Go
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em Go
Elton Minetto
 
Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)
Elton Minetto
 
Gerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github Projects
Elton Minetto
 
Serverless em Go
Serverless em GoServerless em Go
Serverless em Go
Elton Minetto
 
JAMstack
JAMstackJAMstack
JAMstack
Elton Minetto
 
Programar != desenvolver software
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver software
Elton Minetto
 
A jornada do desenvolvedor
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedor
Elton Minetto
 
Product and Technology
Product and TechnologyProduct and Technology
Product and Technology
Elton Minetto
 
Code:Nation Tech Stack
Code:Nation Tech StackCode:Nation Tech Stack
Code:Nation Tech Stack
Elton Minetto
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIs
Elton Minetto
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP world
Elton Minetto
 
Building APIs using Go
Building APIs using GoBuilding APIs using Go
Building APIs using Go
Elton Minetto
 
Start you
Start youStart you
Start you
Elton Minetto
 
O case da Compufácil e AWS
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWS
Elton Minetto
 
Introdução a Go
Introdução a GoIntrodução a Go
Introdução a Go
Elton Minetto
 
Como extrair métricas do Trello
Como extrair métricas do TrelloComo extrair métricas do Trello
Como extrair métricas do Trello
Elton Minetto
 
Memórias das trincheiras (parte 2)
Memórias das trincheiras (parte 2)Memórias das trincheiras (parte 2)
Memórias das trincheiras (parte 2)
Elton Minetto
 
Metodologias ágeis interativas
Metodologias ágeis interativasMetodologias ágeis interativas
Metodologias ágeis interativas
Elton Minetto
 
De Padawan a Jedi - Versão 2016
De Padawan a Jedi - Versão 2016De Padawan a Jedi - Versão 2016
De Padawan a Jedi - Versão 2016
Elton Minetto
 

Mais de Elton Minetto (20)

Go e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outroGo e Microserviços - Nascidos um para o outro
Go e Microserviços - Nascidos um para o outro
 
Object Calisthenics em Go
Object Calisthenics em GoObject Calisthenics em Go
Object Calisthenics em Go
 
Programar != desenvolver software (v2)
Programar != desenvolver software (v2)Programar != desenvolver software (v2)
Programar != desenvolver software (v2)
 
Gerenciando uma startup no Github Projects
Gerenciando uma startup no Github ProjectsGerenciando uma startup no Github Projects
Gerenciando uma startup no Github Projects
 
Serverless em Go
Serverless em GoServerless em Go
Serverless em Go
 
JAMstack
JAMstackJAMstack
JAMstack
 
Programar != desenvolver software
Programar != desenvolver softwareProgramar != desenvolver software
Programar != desenvolver software
 
A jornada do desenvolvedor
A jornada do desenvolvedorA jornada do desenvolvedor
A jornada do desenvolvedor
 
Product and Technology
Product and TechnologyProduct and Technology
Product and Technology
 
Code:Nation Tech Stack
Code:Nation Tech StackCode:Nation Tech Stack
Code:Nation Tech Stack
 
Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIs
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP world
 
Building APIs using Go
Building APIs using GoBuilding APIs using Go
Building APIs using Go
 
Start you
Start youStart you
Start you
 
O case da Compufácil e AWS
O case da Compufácil e AWSO case da Compufácil e AWS
O case da Compufácil e AWS
 
Introdução a Go
Introdução a GoIntrodução a Go
Introdução a Go
 
Como extrair métricas do Trello
Como extrair métricas do TrelloComo extrair métricas do Trello
Como extrair métricas do Trello
 
Memórias das trincheiras (parte 2)
Memórias das trincheiras (parte 2)Memórias das trincheiras (parte 2)
Memórias das trincheiras (parte 2)
 
Metodologias ágeis interativas
Metodologias ágeis interativasMetodologias ágeis interativas
Metodologias ágeis interativas
 
De Padawan a Jedi - Versão 2016
De Padawan a Jedi - Versão 2016De Padawan a Jedi - Versão 2016
De Padawan a Jedi - Versão 2016
 

Clean Architecture in Golang