DEV Community

Cover image for Saga Solid de uma forma divertida(S)
isaquepf
isaquepf

Posted on • Edited on

Saga Solid de uma forma divertida(S)

SOLID é um acrônimo que representa cinco princípios essenciais para o design de classes na programação orientada a objetos. Esses princípios nos ajudam a criar código mais organizado, flexível e fácil de manter. Vamos falar deles nessa sequencia:

  1. S Princípio da Responsabilidade Única (SRP):
  2. O Princípio Aberto/Fechado (OCP):
  3. L Princípio da Substituição de Liskov (LSP):
  4. I Princípio da Segregação da Interface (ISP):
  5. D Princípio da Inversão da Dependência (DIP):

  6. Princípio da Responsabilidade Única (SRP):

  • Imagine que cada classe é como um super-herói com uma única missão. O SRP diz que uma classe deve ter apenas uma razão para mudar. Em outras palavras, ela deve fazer apenas uma coisa e fazer bem feito. Se você tem uma classe que lida com dados de estudantes, ela não deve se meter em assuntos de bancos de dados ou cálculos matemáticos. Mantenha-a focada!

Exemplo de uso do princípio de responsabilidade única:

Imagine que estamos construindo um sistema de gerenciamento de heróis. Cada herói tem um nome, superpoderes e uma pontuação de popularidade. Vamos criar uma classe Hero que segue o SRP:

`using System;

class Hero
{
    public string Name { get; set; }
    public string[] Superpowers { get; set; }
    public int PopularityScore { get; set; }

    public void IncreasePopularity()
    {
        // Lógica para aumentar a popularidade do herói
        PopularityScore += 10;
        Console.WriteLine($"{Name} ganhou 10 pontos de popularidade!");
    }
}

class Program
{
    static void Main()
    {
        var spiderman = new Hero
        {
            Name = "Homem-Aranha",
            Superpowers = new[] { "Agilidade", "Sentido Aranha", "Lançador de Teias" },
            PopularityScore = 100
        };

        spiderman.IncreasePopularity();
        Console.WriteLine($"Popularidade do {spiderman.Name}: {spiderman.PopularityScore}");
    }
}`
Enter fullscreen mode Exit fullscreen mode

Nesse exemplo, a classe Hero tem apenas uma responsabilidade: representar um herói e gerenciar sua popularidade. Ela não se preocupa com a persistência em banco de dados nem com a exibição na interface do usuário. Isso é delegado a outras partes do sistema.

Agora vou mostrar um exemplo de Violação do SRP, para fixarmos o conceito e nos atentarmos quando estivermos codando...
Recebemos uma demanda para salvar as alterações do Heroi e implementamos na classe HeroManager, que agora faz tudo: cria heróis, salva no banco de dados e exibe na tela. Virou uma bagunça! Veja:

`using System;

class HeroManager
{
    public void CreateHero(string name, string[] superpowers)
    {
        // Lógica para criar um herói
        Console.WriteLine($"Herói {name} criado!");
    }

    public void SaveToDatabase(Hero hero)
    {
        // Lógica para salvar no banco de dados
        Console.WriteLine($"Herói {hero.Name} salvo no banco de dados!");
    }

    public void DisplayHero(Hero hero)
    {
        // Lógica para exibir na tela
        Console.WriteLine($"Nome: {hero.Name}, Superpoderes: {string.Join(", ", hero.Superpowers)}");
    }
}

class Program
{
    static void Main()
    {
        var manager = new HeroManager();
        var ironMan = new Hero { Name = "Homem de Ferro", Superpowers = new[] { "Tecnologia avançada" } };

        manager.CreateHero(ironMan.Name, ironMan.Superpowers);
        manager.SaveToDatabase(ironMan);
        manager.DisplayHero(ironMan);
    }
}`
Enter fullscreen mode Exit fullscreen mode

Nesse exemplo, a classe HeroManager está sobrecarregada. Ela deveria ter apenas a responsabilidade de gerenciar heróis, mas está fazendo muito mais. Isso dificulta a manutenção e torna o código confuso.

Lembre-se sempre do SRP: cada classe deve ter uma única razão para mudar. Mantenha seus heróis (e suas classes) focados em suas missões específicas! 🦸‍♀️🦸‍♂️

Espero que tenham gostado!

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay