Entendendo SOLID com exemplos em C#

Como os cinco princípios escritos por Uncle Bob podem ajudar seu código

Robert C. Martin (Uncle Bob) escreveu em 2000 os principais fatores que ele observou em códigos bem escritos, esses fatores, ele chamou de SOLID — acrônimo para 5 práticas essenciais que devem ser seguidas para construir sistemas que possam crescer com uma boa manutenção.

1. Single Responsibility Principle

class Usuario
{
public string Nome { get; private set; }
public string Email { get; private set; }
public Usuario(string nome, string email)
{
this.Nome = nome;
this.Email = email;
}
public void PersistirUsuario()
{
SqlConnection conexao = new SqlConnection("string de conexao");
SqlCommand cmd = new SqlCommand();
// cmd.CommandText...
// ...
// ..
conexao.Close();
}
class Usuario
{
public string Nome { get; private set; } public string Email { get; private set; } public Usuario(string nome, string email)
{
this.Nome = nome; this.Email = email; }}class UsuarioRepository{ public void Persistir(Usuario usuario) { ConexaoSQL conexao = new ConexaoSQL(); // Salva usuario no banco // Fecha conexao }}class ConexaoSQL{ public void AbrirConexao() { //.. }}

2. Open/Closed Principle

class Paralelograma{      public int Area(int largura, int comprimento, string tipo)      {      if(tipo == "retangulo")         return largura * comprimento;      else if(tipo == "quadrado")         return largura * largura;      else         return -1;   }}

3. Liskov Substitution Principle

4. Interface Segregation Principle

interface ICadastro{   void ValidarDados();   void PersistirBanco();   void MandarEmail();}class Cliente : ICadastro{   public void ValidarDados()   {...}   public void PersistirBanco()   {...}   public void MandarEmail()   {...}}class Produto : ICadastro{   public void ValidarDados()   {...}   public void PersistirBanco()   {...}   public void MandarEmail()  {     // apenas criamos o metodo mas deixamos vazio.  }}
interface ICadastroCliente{   void ValidarDados();   void PersistirBanco();   void MandarEmail();}interface ICadastroProduto{   void ValidarDados();   void PersistirBanco();}class Cliente : ICadastroCliente{   public void ValidarDados()   {...}   public void PersistirBanco()   {...}   public void MandarEmail()   {...}}class Produto : ICadastroProduto{   public void ValidarDados()   {...}   public void PersistirBanco()   {...}}

5. Dependency Inversion Principle

interface IPoligono{   int Calcular();}class Retangulo : IPoligono{   public int Largura { get; set; }   public int Comprimento { get; set; }   public int Calcular()   {      return Largura * Comprimento;   }}class Quadrado : IPoligono{   public int Largura { get; set; }   public int Calcular()   {
return Largura * Largura;
}}class Paralelograma{ public int Area(IPoligono poligono) { return poligono.Calcular(); }}
class Usuario{...}interface IUsuarioRepository{   void Persistir(Usuario usuario);}
class UsuarioRepositoryPgSql : IUsuarioRepository{ public void Persistir(Usuario usuario) { //implementamos como deve ser feito a implementação para persistir //um usuario no banco de dados postgresql }}interface IUsuarioServices{ void AdicionarUsuario(Usuario usuario);}class UsuarioServices : IUsuarioServices{ private readonly IUsuarioRepository _usuarioRepository; public UsuarioServices(IUsuarioRepository usuarioRepository) { _usuarioRepository = usuarioRepository; } public void AdicionarUsuario(Usuario usuario) {
// poderiamos verificar se o objeto usuario é valido antes de persistir
_usuarioRepository.Persistir(usuario); }}

trying to make things valuable

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store