Giter Site home page Giter Site logo

cleanarch's Introduction

Clean Architecture Lab

Lab para estudo da idéia de Clean Arch do Uncle Bob.

The center of your application is not the database. Nor is it one or more of the frameworks you may be using. The center of your application is the use cases of your application Unclebob

O que é Clean Architecture?

Na minha opinião Clean Architecture é uma forma de pensar, estruturar e organizar uma aplicação de software aplicando fortemente boas práticas de Programação Orientada a Objetos. Práticas como: Escrever código com Responsabilidade Única, classes e funções que sejam Coesas, possuam Baixo Nível de Acoplamento com suas dependências, aplicam o princípio de Inversão de dependência, naturalmente levam a um desenho arquitetural mais limpo.

Diagrama Uncle Bob

The Clean Architecture

Diagrama de Componentes

Components

Problemas comuns onde Clean Arch pode ajudar

  • Decisões de infraestrutura tomadas no início do projeto (banco de dados, frameworks, ferramentas de mensageria);
  • Desenhos baseados em stack tecnológico e não em necessidades de negócio;
  • Dificuldade de mudança de alguma tecnologia;
  • Desrespeito a Pirâmide de Testes (exemplo: mais testes de integração que unitários).

Prós:

  • Foco nos casos de Uso de Negócio e não em componentes de infraestrutura e/ou frameworks;
  • Casos de Uso implementados em um único lugar;
  • Facilidade de Manutenção e de aplicar mudanças;
  • Total separação de responsabilidades (causa uma impressão de que cada coisa em seu devido lugar);
  • Abordagem de teste mais efetiva (respeitando a pirâmide de testes);
  • Independente de Framework, Banco de Dados e componentes de Infraestrutura em Geral.

Contras:

  • Mais código escrito e uma aparente repetição de código;
  • Pode levar mais tempo para desenvolver inicialmente (maior custo de desenvolvimento);
  • Curva de aprendizagem e de adaptação;
  • Pode provocar discussões filosóficas intermináveis (se está quebrando o padrão, até onde abrir exceções para ser mais produtivo, etc).

Observação A máxima segue verdadeira There is no silver bullet!. Na minha opnião é preciso avaliar os prós e contras da aplicação desta abordagem e entender como ela pode ajudar (ou não) em cada projeto (como fazemos com qualquer outra tecnologia/metodologia).

Fontes

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.