1
resposta

[Projeto] Gestão de serviço

IServico.cs

interface IServico
{
    void ExecutarServico();
}

Funcionario.cs

class Funcionario
{
    public string Nome { get; }
    public string Departamento {  get; }

    public Funcionario (string nome, string departamento)
    {
        this.Nome = nome;
        this.Departamento = departamento;
    }
}

Manutencao.cs

class Manutencao : IServico
{
    private string Titulo;
    private Funcionario Responsavel;

    public Manutencao (string titulo, Funcionario responsavel)
    {
        this.Titulo = titulo;
        this.Responsavel = responsavel;
    }

    public void ExecutarServico()
    {
        Console.WriteLine($"Executando serviço de manutenção: {Titulo}");
        Console.WriteLine($"Responsável: {Responsavel.Nome} - Departamento: {Responsavel.Departamento}");
    }
}

Consultoria.cs

class Consultoria : IServico
{
    private string Titulo;
    private Funcionario Responsavel;

    public Consultoria(string titulo, Funcionario responsavel)
    {
        Titulo = titulo;
        Responsavel = responsavel;
    }

    public void ExecutarServico()
    {
        Console.WriteLine($"Executando serviço de consultoria: {Titulo}");
        Console.WriteLine($"Responsável: {Responsavel.Nome} - Departamento: {Responsavel.Departamento}\n");
    }
}

Program.cs

Funcionario tecnico = new Funcionario("Matheus", "TI");
IServico s1 = new Manutencao("Atualização de servidor", tecnico);

Funcionario analista = new Funcionario("Marina", "Consultoria");
IServico s2 = new Consultoria("Planejamento estratégico", analista);

s1.ExecutarServico();
s2.ExecutarServico();
1 resposta

Oi, Matheus. Como vai?

Gostei da forma como você organizou a solução com a interface IServico e também da composição com a classe Funcionario, porque isso deixa o projeto mais claro e facilita criar novos tipos de serviço no futuro. Seu exemplo mostra bem a diferença entre herança e composição, já que Manutencao e Consultoria compartilham o contrato da interface, mas reutilizam um objeto responsável em vez de herdar comportamento dele.

Uma dica interessante para o futuro é usar override ToString() na classe Funcionario para centralizar a exibição dos dados e evitar repetir Responsavel.Nome e Responsavel.Departamento em vários pontos. Veja este exemplo:


class Funcionario
{
    public string Nome { get; }
    public string Departamento { get; }

    public Funcionario(string nome, string departamento)
    {
        Nome = nome;
        Departamento = departamento;
    }

    public override string ToString()
    {
        return $"{Nome} - Departamento: {Departamento}";
    }
}

Esse código faz com que o objeto Funcionario já retorne um texto formatado ao ser exibido no Console.WriteLine.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!