Skip to content

API Admin do catalogo criada com base de conceitos em clean archtecture do FullCycle

Notifications You must be signed in to change notification settings

Paulo-DevTallos/codeflix-FC

Repository files navigation

O que são entidades?

  • Chamadas de enterprise Business Rules -> Entidades. São o inicio do desenvolvimento e é a camada central que engloba as regras cruciais de negócios, ou seja, são objetos que organizam essas regras permitindo que a gente acesse e processe essas informações.
  • São identificáveis por uma informação única dentro de nosso sistema (id)
  • É diferente de um padrão de entidade criado em ORMs, pois possuem expressividades dentro da aplicação pois possuem regras de negocios e são agnosticas a frameworks e a linguagens de programação.
  • Possuem regras de negócios mais puristas.
  • É considerado o coração da aplicação, pois provê os recursos sobre os a regra da aplicação é regida.

O que são useCases? (caso de uso)

  • Centralizam regras de negócios de acordo com a necessidade da aplicação como apontar operações que podem envolver banco de dados, ou realizar publicação em serviços de mensagerias, por exemplo...
  • Se integram com as regras construídas na entidade da aplicação.

Controllers

  • Acesssam os casos de uso

O que são domain experts? (Especialista de dominio)

  • São pessoas que contém o conhecimento da regra de negócio, ou seja, são pessoas que detem o conhecimento de como a aplicação deve funcionar de acordo com seu dia a dia de trabalho. Ex: Em um setor administrativo temos rotinas, passo a passo relacionado gestão e arquivamento de documentos.

Observações

  • As alterações em camadas mais externas não devem interferir nas camadas mais internas.
  • As camadas precisam do que chamamos de limites arquiteturais.
    • Ou seja, a camada de Entidade nunca deverá ser alterada
    • A camada de useCase tende a mudar muito pouco relacionado as camadas mais externas.
  • Linguagem Ubiqua -> é uma linguagem descritiva sobre as representações repassadas pelo domain expect
  • Livre-se do FDD (Desenvolvimento orientado a framework)
  • Expressividade é o mesmo que regra de negocios
  • Padrão de pastas @seedwork representa uma pasta onde são criados objetos de valores, ou seja recursos que podem ser compartilhados entre os outros modulos da aplicação em uma especie de shared. A nomenclatura "@" diz que essa pasta sempre aparecerá na primeira posição no ordenamento de pastas.
  • Objeto de valor nao possui identidade própria.

Informações do diagrama de caso de uso:

  • Admin:
    • Criar categoria
    • Atualizar categoria
    • Excluir categoria
    • Consultar uma categoria
    • Consultar categorias

Diagrama de classe - Montagem da Entidade

  • Entity Category

    • Category: id uuid
    • name string
    • description string
    • is_active boolean
    • created_at date
  • Category : Create()

  • Category : Update()

  • Category : Activate()

  • Category : Deactivate()

  • Category : delete()

Obs:

  • trabalhar com sets em excesso pode tirar a expressividade da entidade tornando-a anemica.
  • é importante pensar nas operações de forma agnostica a qualquer recurso externo. Uma boa arquitetura permite adiar decisões.
  • Quando se constroi uma entidade com esses conceitos de arquitetura as props da entidade nem sempre serão obrigatórias. Ex: Imagine que na nossa entidade com name, description, is_active, created_at, description seja facultativo... obrigatóriamente todas as props seguintes tambem precisam ser facultativas, pois dentro de metodos e construtores não é possível que uma prop da metade do ordenamento seja opcional. Props opcionais devem ficar por ultimo nas suas declarações.
  • Com isso utilizamos interfaces que permitem flexibilizar esse manuzeio

Clean Architecture: Criado por Uncle Bob Robert C Martin em 2012

Ponto focal de arquitetura limpa, consiste em

  • Proteger o núcleo central e dominios da aplicação
  • Cria contratos (intefaces) entre as camadas
  • Baixo acoplamento entre as camadas
  • Orientada a casos de uso (são intensões do usuario para com o sistema)
  • Percepção sobre regras de negócios

Key Option Open

  • Criar limites arquiteturais muito claros acaba por criar partes que não dependam diretamente uma da outr além de nos permitir postergar decisões.

Pontos importantes sobre arquitetura:

  • Formato que o Software terá - Ligado ao design de software
  • Divisão de componentes - Pensar a nível de arquitetura quais componentes ele terá
  • Comunicação entre esses componentes
  • Uma boa arquitetura vai facilitar o processo de desenvolvimento, deploy, operação e manutenção.

Regras vs Detalhes

  • Regras de negocio trazem o real valor para o sistema
  • Detalhes ajudam a suportar as regras
  • Detalhes não devem imapctar nas regras de negócio
  • Frameworks, banco de dados, apis, não devem imapactar as regras
  • O Core da sua aplicação é o mais importante

DDD - Atacar a complexidade no coração do software

A importancia de casos de uso (UseCases)

  • Representam uma intenção - Cada ação é uma intenção e cada intenção e um caso de uso
  • Clareza de cada comportamento do software
  • Detalhes não devem impactar nas regras de negocio
  • Frameworks, banco de dados, apis não devem impactar nas regras de negócios

UseCases - SRP (Single responsability Principle)

  • Temos a tendencia de "reaproveitar" use cases por serem muito parecidos.
  • Ex: Alterar vs Inserir. Ambos consultam se o registro existe, persistem dados. MAS, são useCases diferentes. Porque?
  • SRP - Mudam por razões diferentes Quando a alteração naquele código é diferente, muda quando voce faz alterações por razões diferentes significa que o SRP está sendo ferido, cada use cases apesar de parecido tem razões de mudanças diferentes.

Duplicação real vs Duplicação acidental

  • Falsas duplicações nos faz perceber que conforme o sistema vai mudando suas etapas de codigo andam por caminhos diferentes

Use Cases contam historias

  • Muitas vezes uma intenção pode soar muito estranho
  • use case é a concretização de uma automatização, visto que um sistema é automatização de tarefas
  • O use case é o orquestrador do fluxo dentro da aplicação Ex: Simulação de caso de uso (Emprestimo)- regra de negocio que é chamada a partir do use case 1 - Aceita e valida o nome 2 - Valida endereço, aniversário, DL, SSN... 3 - Capta o credit score 4 - Valida se o credit score é < 500, se não ela nega 5 - Se não ele cria a estimativa de emprestimo.

Limites arquiteturais:

  • Divisão de componentes e estabilização de contratos Tudo que nao impacta diretamente nas regras de negocio deve estar em um limite arquitetural diferente. Ex: Não será o Frontend, banco de dados que mudarão as regras da aplicação.

Business Rules Layer | | implementação | Database interface (Abstração) | | implementação | Database Access ------------> Database

A camanda de negócios inversamente chama a camada de regras de negócios Nunca a camada de regras de negocios deve chamar a camada que acessa banco de dados

Input vs Output

  • Tudo se resume a um input que retorna um output
  • Ex: Criar um pedido (dados do pedido = input) Pedido criado (dados de retorno do pedido)
  • Simplifique seu raciocinio ao criar um software sempre pensando em Input e Output
  • Inputs geralmente vem de qualquer lugar, porém no fim do dia sempre vai ser um input, da mesma forma ocorre com o Output

DTO - (Data Transfer Objct)

  • Trafegar os dados entre os limites arquiteturais Ex: Trafega os dados entre as camadas criando um Objeto que é utilizado para trafegar esses dados
  • Objeto anemico, não possui comportamento livre de regras
  • Contem dados (Inputs e Outputs) =====> Controller =====> useCase useCase ======> Controller
  • Outro ponto importante é que cada intensão do sistema muitas vezes precisa de DTOs diferentes Ex: Imagine que queremos criar uma categoria, criamos um DTO onde precisamos ter um Objeto com Atributos que retorne esse fluxo
  • Para alterar dados devemos criar um novo DTO que vai tratar os dados especificos para alteração
  • São diferentes pois cada DTO segue um caminho diferente

Ex: DTO input - Request

  • API -> CONTROLLER -> USE CASE -> ENTITY O fluxo de devolução da informação também funciona via DTO
  • Controller cria um DTO com os dados recebidos, cria um DTO para output e retorna para o controller

Presenters

  • Objetos de transformação
  • Adequa o DTO de output no formato correto para entregar o resultado
  • Lembrando: Um sistema por ter diversos formatos de entrega, ex: XML, JSON, Protobuf, GraphQL, CLI... Ex: Criação de um DTO que será trafegado input = new CategoryInputDTO("name"); output = CreateCategoryUseCase(input); -> A partir daqui estamos trafegando dados de uma camada para outra jsonResult = CategoryPresenter(output).toJson(); -> Convertemos o output para um JSON, mas poderia ser qualquer coisa

Entidades - Entities

  • Entities da Clean Architecture !== Entities do DDD
  • No DDD são Camadas de agregado, no Clean Arch é um conceito de camada com regras de negocios
  • Elas se aplicam em qualquer situação pois são o core da aplicação com regras de negocios globais
  • Não há definição explicita de como criar as entities
  • Normalmente utilzamos táticas do DDD
  • Entities = Agregados + Domain Services
  • useCase pode varia com o fluxo / entity tem suas regra solidificadas

About

API Admin do catalogo criada com base de conceitos em clean archtecture do FullCycle

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published