GithubHelp home page GithubHelp logo

clean-architecture's Introduction

Clean Architecture

  • O principal motivo para implementar Arquitetura limpa é para o beneficio de seus "habitantes".
    • É em pról dos usuários do sistema: para que ele tenha a melhor experiencia possivel.
    • É em pról dos desenvolvedores do sistema: para que tudo desenvolvido seja de mais simples entendimento, desenvolvimento e manutenção.
    • Nada de egos ou desejos.
    • Implementações complexas só devem ser feitas caso o beneficio ao usuário/desenvolvedor seja maior do que sua complexidade.
    • Foco no essencial para o usuário.
    • Construir somente o que é necessário quando for necessário.
    • A Arquitetura Limpa ajuda na Otimização e Manutenabilidade, que é a maioria das atividades do nosso dia a dia.

Domain Centric Architecture

  • O principal motivo para implementar o Modelo de Arquitetura Centrada em Domínio é focar no que é mais importante o Dominio de Negócio.
    • Tipos de Domain Centric Architecture:
      • Hexagonal (by: Alistair Cockburn)
      • Onion (by: Jeffrey Palermo)
      • Clean (by: Uncle Bob [Robert C. Martin])

Prós :) e Contras :( em utilizar Domain Centric Architecture

Prós

  • Focar no domínio é essencial para os "habitantes", pois é o ponto mais importante para eles na nossa arquitetura.
  • Nos da menos acoplamento entre a lógica de domínio e os detalhes de implementação como apresentação, banco de dados e o sistema operacional. Com isso o sistema fica mais flexível e adaptável, e mais simples de evoluir a arquitetura ao redor durante os anos de desenvolvimento e manutenção do projeto.
  • Nos possibilita usar o DDD, que é um auxiliar para generenciar domínios de negócio com um alto grau de complexidade.

Contras:

  • Mudanças são difíceis, pelo fato de nem todos os desenvolvedores saberem, as vezes ter somente 1 pessoa no time que saiba a fundo sobre o padrão, torna a utilização dele complicada, pois é necessário conhecimento estruturado e tempo para passar para frente.
  • Requere mais análise, para saber exatamente o que pertence a camada de Domínio e o que pertence a camada de Aplicação.
  • Maior custo inicial, no começo o custo pode ser maior devida a maior complexidade de implementação do padrão, mas normalmente ela se paga ao passar do tempo.
  • Obs: Um domínio não pode ter nada além do domínio de negócio em si que será representado no código, tudo fora isso, classes, métodos, qualquer código que não represente o domínio de négocio, deve ficar fora deste projeto.
    • Ex:
      • Camadas de apresentação
      • Infraestrutura
      • Persistencia

O que são Layers?

  • Layers são limites ou partições verticais de um aplicativo ou projeto que ajudam a gerenciar complexidade.
    • Eles ajudam a:
      • Representar diferentes níveis de abstração
      • Manter o princípio de responsabilidade única
      • Isolar grupos e skills
      • Suportar várias implementações
      • E ajudar nas alterações e variações.

Application Layer

  • É onde fica todo o caso de uso do projeto, as ações que são necessárias para cumprir um determinado objetivo, seja gravar um registro, executar um processo ou buscar um relatório.
  • Prós:
    • Foco no caso de uso, que é um dos pontos essenciais aos "habitantes" do projeto.
    • Fácil de entender, pois com o projeto quebrado em pequenos pedaços por assunto, fica tudo mais simples de se entender, ajudando assim no desenvolvimento e manutenção.
    • Segue o DIP(Princípio da Inversão de Dependência), deixando o código mais flexivel e sustentavel, e nos ajuda a decidir as implementações e evoluir a arquitetura ao longo do projeto.
  • Contras:
    • Camadas são dificeis de manter, e quanto mais camadas, mais complexo o projeto.
    • Exige mais tempo para decidir o que deve estar na camada de Aplicação, e o que deve estar na camada de Domínio. Ao invés de simplesmente jogar tudo em uma Camada de Negócio.

Classic Three-Layer Architecture

Modern Four-Layer Architecture

Abaixo alguns itens complementares importantes

clean-architecture's People

Contributors

alu1994 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.