2
respostas

[Dúvida] Implementar o nome do usuário na mensagem de bem-vindo ao sistema interno

Boa noite,

Tentei inserir o nome do usuário que fez login junto a mensagem de boas-vindas ao sistema interno, fazendo dessa forma:

public class SistemaInterno
    {
        public bool Logar (IAutenticavel usuario, string login, string senha)
        {
            bool usuarioAutenticado = usuario.Autenticar(login,senha);
            if(usuarioAutenticado == true)
            {
                Console.WriteLine($"{usuario.Nome}, bem-vindo ao sistema interno");
                return true;
            }
            else
            {
                Console.WriteLine("login e/ou senha incorreto");
                return false;
            }
        }

Porém me retorna um erro, informando que a interface IAutenticavel, não possui um atributo nome em seu corpo. Porém as classes que "assinaram esse contrato" possuem, que seriam as que herdarem FuncionarioAutenticavel, ja que está herda de Funcionario e a ParceiroComercial por si só possui tem um Nome em seu corpo. Para corrigir esse erro a princípio fiz assim:

    public interface IAutenticavel 
    {
        public string Nome { get; set; }

        public bool Autenticar(string usuario, string senha);

    }

Existe algum problema em adicionar esse atributo Nome ao corpo da interface? Pelo o que eu pesquisei, vi que não tem tanto problema, mas não é uma boa prática e o ideal seria criar uma interface apenas para Dados, então fiz uma nova interface IAutenticavelDados:

    public interface IAutenticavelDados
    {
        public string Nome { get; set; }
    }

Dessa maneira, apaguei o atributo Nome da interface IAutenticavel e fiz com que ela "assine o contrato" com essa nova interface IAutenticavelDados, assim não apresentou nenhum erro, porém também não sei se está correto

2 respostas

Bom dia Matheus,

Desculpe, tenho uma pergunta.

  • Você herdou a interface "IAutenticavel" dentro da classe do usuário?
public class usuario : IAutenticavel
{
    public string Nome { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

    public bool Autenticar(string usuario, string senha)
    {
        Console.WriteLine("Usuario: " + usuario);
        Console.WriteLine("Senha: " + senha);

        return true;
    }
}

Se sim, como você programou o "get" e o "set"?

[]'s,

Fabio I.

Na realidade eu herdei a interface "IAutenticavel" dentro da classe de FuncionarioAutenticavel e ParceiroComercial,

FuncionarioAutenticavel herda a classe Funionario, onde lá tem um Nome (por esse motivo ele não está declarado no corpo da classe), porém nem todo funcionário é um Funcionario autenticavel, ou seja, nem todo funcionário poderá fazer o login no sistema, portanto Funcionario não pode herdar IAutenticavel diretamente

    public abstract class FuncionarioAutenticavel : Funcionario, IAutenticavel
    {
        public string Senha { get; set; }
        public string Login { get; set; }

        public bool Autenticar(string login, string senha)
        {
            return this.Senha == senha && this.Login == login;

        }
        public FuncionarioAutenticavel(string cpf, double salario) : base(cpf, salario)
        {
        }
    }
    public class ParceiroComercial : IAutenticavel
    {
        public string Nome { get; set; }
        public string Senha { get; set; }
        public string Login { get; set; }
        public bool Autenticar(string login, string senha)
        {
            return this.Senha == senha && this.Login == login;
        }
    }