Giter Club home page Giter Club logo

solid-examples's Introduction

solid-examples

image

Exemplos práticos e didáticos sobre SOLID.

Como consumir este repositório

Rode yarn install e dentro de cada exemplo yarn install ; yarn test.

Como funciona os exemplos

Alguns são evoluções de exemplos anteriores.

Note que cada um tem um README sobre ele dividido pelo seguinte:

  • Configuração do projeto;
  • Passos a seguir no desenvolvimento;
  • Problema a ser resolvido;
  • Regras;
  • Objetivos;
  • Ilustração;
  • Abstrações;
  • Roteiro (talvez).

Princípios do SOLID

Os princípios SOLID para programação e design orientados a objeto são de autoria de Robert C. Martin (mais conhecido como Uncle Bob) e datam do início de 2000.

A palavra SOLID é um acróstico onde cada letra significa a sigla de um princípio: SRP, OCP, LSP, ISP e DIP.

Sigla Nome Descrição
SRP Single Responsibility Principle Uma classe deve ter um, e somente um, motivo para mudar.
OCP Open Closed Principle Você deve ser capaz de estender um comportamento de uma classe, sem modificá-lo.
LSP Liskov Substitution Principle As classes derivadas devem poder substituir suas classes bases.
ISP Interface Segregation Principle Muitas interfaces específicas são melhores do que uma interface geral.
DIP Dependency Inversion Principle Dependa de uma abstração e não de uma implementação.

Os princípios SOLID devem ser aplicados no desenvolvimento de software de forma que o software produzido tenha as seguintes características:

  • Seja fácil de manter, adaptar e se ajustar às constantes mudanças exigidas pelos clientes;
  • Seja fácil de entender e testar;
  • Seja construído de forma a estar preparado para ser facilmente alterado com o menor esforço possível;
  • Seja possível de ser reaproveitado;
  • Exista em produção o maior tempo possível;
  • Que atenda realmente as necessidades dos clientes para o qual foi criado.

A utilização dos princípios SOLID tem o objetivo de evitar:

  • Erros, Falhas e defeitos
  • Estrutura de código ruim
  • Código insustentável (difícil de manter)
  • Desempenho sofrível
  • Código de difícil compreensão

Single Responsibility Principle

1-single-responsibility-principle

Uma entidade deveria ser responsável por apenas uma atividade

Utilizando esse principio você poderá garantir que qualquer alteração que venha a acontecer no código irá impactar somente seus dependentes diretos.

Open Closed Principle

2-open-close-principle

As entidades de (classes, módulos, funções) devem estar abertas para extensão, entretanto fechado para modificação

Utilizando esse princípio podemos garantir que as alterações sendo realizadas através de extensão da entidade base, nada será afetado no contexto dos códigos que utilizam a classe original.

Liskov Substitution Principle

3-liskov-substitution-principle

O objetivo desse princípio é verificar que uma subclasse poderá ser substituída pela sua super classe sem quebrar a aplicação

Se Cigar/Beer/Water é subclasse de Product, os objetos do tipo Product podem ser substituidos por instâncias de Cigar/Beer/Water.

Interface Segregation Principle

4-interface-segregation-principle

Crie interfaces refinadas e específicas, porque elas são melhores que interfaces genéricas

Não devemos ser forçados a depender das interfaces que não iremos utilizar. Esse princípio lida com as desvantagens da implementação de grandes interfaces únicas.

Dependency Inversion Principle

5-dependency-inversion-principle

Depender das abstrações que recebe e não das implementações feitas internamente

Separe os locais que tem forte acoplamento. Até um new AlgumaCoisa() pode gerar acoplamento. Sempre que possível e fazer sentido, passe uma implementação abstraída em um método ou classe por parâmetro até onde ela será utilizada.

Referências

solid-examples's People

Contributors

jefferson-william 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.