Skip to content
/ SOLID Public

Refatoração do sistema de leilões com os principios SOLID

Notifications You must be signed in to change notification settings

M4Falcao/SOLID

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projeto para o curso de SOLID com CSharp

Antes do SOLID

image

Dívida tecnica Code smeells (pistas de problemas): Repetição de códigos

Experiência de outros devs: Patterns Princípios S.O.L.I.D

Single responsibility principle

Metodos e classes devem ter uma unica responabilidade (coesos)

Ao escrever um módulo de software você precisa garantir que quando as mudanças forem solicitadas, elas só originem de uma pessoa ou grupo de pessoas representando uma função de negócio específica.

Dependency inversion principle

image

Como analiso as dependências de uma classe? Vendo quais metodos e propriedades ela usa de outras classes

Qual a diferença entre acoplamento bom e ruim? bom dificilmente vai ser alterado

O que são classes instáveis? classes que dependem de classes que podem ser alteradas e dependem de classes que dependem de outras classes

Que estratégias utilizo para minimizar os acoplamentos ruins?

De que maneira o AspNet Core ajuda a minimizar o acoplamento de nossos controladores e tipos em geral?


Crie abstrações e dependa delas para melhorar a qualidade do acoplamento. Esse hábito é formalizado através do Princípio da Inversão das Dependências (DIP), a letra D na sigla S.O.L.I.D.

Explicite as dependências de uma classe. Uma das maneiras de fazer isso é usando parâmetros do construtor. Desse jeito aplicamos um conceito chamado Injeção de Dependência (DI). AspNet Core ajuda a injetar as dependências que foram vinculadas no método ConfigureServices() da classe Startup e assim dizemos que o AspNet Core tem como uma de suas principais funcionalidades ser um container de injeção de dependências.

Quando a classe dependente deixa de resolver as dependências diretamente e cede esse controle para outrém temos o uso do conceito Inversão de Controle (IoC)

Open/closed principle

image

Mantenha sua aplicação fechada para mudanças, mas aberta para extensões

Sempre manter o habito de criar novas classes quando quiser alterar algo

Service Layer uma camada arquitetural que separa as regras de negócio das camadas mais externas

Decorator - Uma classe nova chama a antiga com exceção das novas funcionalidades - https://en.wikipedia.org/wiki/Decorator_pattern

Liskov Substitution Principle && Interface Segregation Principle

image

Manter a coesão entre interfaces

Sempre cumprir as promessas das implementações (LSP)

Não implemente funcionalidades que ainda não foram solicitadas! Essa idéia foi cunhada no acrônimo Y.A.G.N.I., You Aint Gonna Need It.

Sempre que possível busque separar as operações das interfaces em grupos menores. Essa idéia é o Princípio da Segregação das Interfaces (ISP)

CQRS (em português)

SRP. classes e métodos devem ter alta coesão

OCP. mantenha seu projeto aberto a mudanças mas fechado a alterações

LSP. cumpra as promessas definidas nas abstrações

ISP. preocupe-se com coesão e acoplamento em suas interfaces

DIP. dependa de abstrações ao invés de classes concretas

image

About

Refatoração do sistema de leilões com os principios SOLID

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published