• Stars
    star
    193
  • Rank 201,081 (Top 4 %)
  • Language
    PHP
  • License
    MIT License
  • Created almost 4 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Clean Architecture de um modo divertido e prático integrando uma API com uma API de Pokémon.

Clean Architecture com Pokémon

A ideia deste repositório é praticar os conceitos da Clean Architecture de um modo divertido e prático integrando uma API com uma API de Pokémon de Terceiros.

Aqui irei tentar replicar algumas regras do clássico jogo Pokémon Gold do Gameboy.

Pokémon Gold Logo

Pré-Requisitos

Tecnologias

Desenho Macro da Arquitetura

Montei um diagrama mostrando como está arquitetado a aplicação baseado nos meus estudos e no meu entendimento da Clean Architecture. Esse diagrama pode ser atualizado (e com certeza será) no decorrer do desenvolvimento desse estudo:

Arquitetura App

Camadas e Decisões

Domain | Entities (Camada Amarela)

Definição do autor:

As Entidades reúnem as Regras Cruciais de Negócios da empresa inteira. Uma entidade pode ser um objeto com métodos ou um conjunto de estruturas de dados e funções. Isso não importa, contanto que as entidades possam ser usadas por muitas aplicações diferentes na empresa e são os objetos de negócios da aplicação.

Elas concentram as regras mais gerais e de nível mais alto. No mínimo, são propensas a mudar quando ocorrer alguma mudança externa. Por exemplo, você não gostaria que esses objetos fossem impactados por uma mudança na navegação de página ou na segurança. Nenhuma mudança operacional em qualquer aplicação específica deve influenciar a camada da entidade.

Fonte: Clean Architecture Book (Página 204)

Uma prática que utilizei aqui é que toda Entity deverá ter sua própria Factory, pois não se sabe como as entitdades podem ser criadas no futuro. As factories nos permite ter essa flexibilidade.

Um exemplo prático pode ser visto no BattleFactory.

Use Cases (Camada Vermelha)

Definição do autor:

O software da camada de casos de uso contém as regras de negócio específicas da aplicação. Ele reúne e implementa todos os casos de uso do sistema. Esses casos de uso orquestram o fluxo de dados para e a partir das entidades e orientam essas entidades na aplicação das Regras Cruciais de Negócios a fim de atingir os objetivos do caso de uso.

Não queremos que as mudanças nessa camada afetem as entidades. Também não queremos que essa camada seja afetada por mudanças em externalidades como a base de dados, a UI ou qualquer framework comum. A camada de casos de uso deve ser isolada dessas preocupações. Contudo, esperamos que mudanças na operação da aplicação afetem os casos de uso e, portanto, o software dessa camada.

Fonte: Clean Architecture Book (Página 204)

Os use cases são separados por suas respectivas pastas e devem ter pelo menos 3 classes:

  • UseCase.php: classe principal onde será implementado o caso de uso;
  • InputBoundary.php: um DTO que representa os dados que serão passados para o caso de uso;
  • OutputBoundary.php: um DTO que representa os dados de saída que o caso de uso deverá retornar;

Dentro dessa camada também terá os contratos necessários para que as camadas mais externas possam se comunicar com esta.

Adapters | Interface Adapters (Camada Verde)

Definição do autor:

O software da camada de adaptadores de interface consiste em um conjunto de adaptadores que convertem dados no formato que é mais conveniente para os casos de uso e entidades, para o formato mais conveniente para algum agente externo como a base de dados ou a web.

Os apresentadores (Presenters), visualizações e controladores (Controllers) pertencem à camada de adaptadores de interface. Os modelos provavelmente são apenas estruturas de dados transmitidas dos controladores para os casos de uso e, então, dos casos de uso para os apresentadores e visualizações.

De maneira similar, os dados dessa camada são convertidos da forma mais conveniente para entidades e casos de uso para a forma mais conveniente para o framework de persistência em uso (por exemplo, a base de dados).Nenhum código interno desse círculo deve saber nada sobre a base de dados.

Fluxo do controle: ele começa no controlador (Controller), passa pelo caso de uso (Use Case) e, então, acaba sendo executado no apresentador (Presenter).

Fonte: Clean Architecture Book (Página 205)

Nessa camada estarão as implementações e adaptações necessárias para que a camada de Use Cases e Entities possam se comunicar com o mundo externo.

Infra | Frameworks and Drivers (Camada Azul)

Definição do autor:

A camada mais externa e é geralmente composta de frameworks e ferramentas como a base de dados e o framework web. Em geral, você não programa muita coisa nessa camada além do código de associação que estabelece uma comunicação com o círculo interno seguinte.

Todos os detalhes ficam na camada de frameworks e drivers. A web é um detalhe. A base de dados é um detalhe. Mantemos essas coisas do lado de fora, onde não podem fazer mal nenhum.

Fonte: Clean Architecture Book (Página 205)

Aqui terão as classes que farão acesso ao mundo externo: Frameworks, bibliotecas, UI, WEB, CLI e etc.

Referências e Links

Casos de Uso

Abaixo estão listadas os casos de uso para termos uma ideia fechada de Domínio e Regras de Negócios:

More Repositories

1

docker-php-nginx-dev

Docker PHP 7.4 FPM + Nginx to developer enviroment
Dockerfile
47
star
2

clean-arch-youtube

Repositório da Série de Vídeos de Clean Arch com PHP
PHP
35
star
3

small-sh

Um encurtador de URL's gratuito e Open source. Torne suas URL's um tanto pequenas forma rápida e gratuita
PHP
30
star
4

yii2-jwt-tools

An easy way to configure JWT authentication and validation on Yii Framework 2 Projects
PHP
28
star
5

clean-arch-clash-royale-php

PHP
18
star
6

indices-financeiros

Componente que faz consulta das cotações dos principais índices financeiros do Brasil
PHP
14
star
7

yii2-skeleton

A new approach for yii2 basic template
PHP
9
star
8

yii2-tactician

An Yii Framework 2 Wrapper/Adapter for Tactician Command Bus Library
PHP
6
star
9

yii2-deploy

Módulo de deploy automático no formato de Modules do Yii Framework 2
PHP
5
star
10

yii2-videos

Material (códigos fontes) utilizados nas vídeo aulas do Yii2 PHP Framework
PHP
4
star
11

taller

Análise Habilidades Técnica para Taller
3
star
12

footballcalendar

Sistema de Gestão de Times de Futebol/Futsal
PHP
3
star
13

clean-arch-clash-royale

TypeScript
3
star
14

nodejs-tdd-cleanarch

JavaScript
2
star
15

micro-varejo-react

JavaScript
2
star
16

clean-arch-php

PHP
2
star
17

micro-orm

A simple and easy ORM using PHP PDO
PHP
1
star
18

tinyme

PHP
1
star
19

yii2-user-module

Implementação padrão de um Módulo de Usuários para meus projetos no Yii2
PHP
1
star
20

clean-code-nodejs

TypeScript
1
star
21

darkmira-carsale

Darkmira Challenge | React JS Position
TypeScript
1
star
22

curso-solid

Arquivos utilizados no curso de SOLID
PHP
1
star
23

send4-challenge

Send4 Challenge
HTML
1
star
24

trello-bi

PHP
1
star
25

curso-nota-10

PHP
1
star
26

tinyme-backend

TypeScript
1
star
27

3x4-cropper

Gerador de fotos 3x4
CSS
1
star
28

yii2-widget-inputsaddon

A Widget for Yii 2 with a simple way to group fields with bootstrap components
PHP
1
star