Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Boa prática para acesso ao método "Autenticar"

Amigos,

No escopo do projeto que se apresenta , uma vez que sempre autenticamos o usuário pelo método Logar da classe SistemaInterno, qual seria a forma de inibir o uso do método Autenticar na implementação sem passar pela verificação do método Logar deixando a chamada abaixo inválida?

 public static void UsarSistema()
        {
            SistemaInterno sistemaInterno = new SistemaInterno();

            ParceiroComercial parceiro = new ParceiroComercial();
            parceiro.Senha = "123456";
            parceiro.Autenticar("1234");
        }

Tentei, por exemplo, implementar nas classes FuncionarioAutenticavel e ParceiroComercial o método com a visibilidade protected, mas isso invalidou a herança da interface IAutenticável por essas classes.

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

        public FuncionarioAutenticavel(double salario, string cpf) 
              : base(salario, cpf)
        {

        }
        protected bool Autenticar(string senha)
        {
            return Senha == senha;
        }
    }

Há alguma solução conhecida ou este método é sempre público?

2 respostas
solução!

Olá Raphael, tudo certo?

Para este caso, poderia ser uma classe abstrata onde essa classe herda de uma interface e você sobrescreve os métodos protegidos da classe abstrata.

Lembrando, você pode (e neste caso vai precisar de) implementar métodos em classes abstratas, então resolve o problema da interface. Então as classes deveriam herdar de uma classe abstrata, que por sua vez herdaria de Funcionario e implementariam IAutenticavel. Claro, isso apenas para os funcionários autenticáveis.

Porém, não é tão problemático manter normalmente sem manter público o uso da interface. Afinal, se alguém do time colocar o fator de autenticação em algum funcionário que não deveria ter, podemos concluir três possibilidades:

  • A documentação sobre o projeto não está muito clara em relação a esta funcionalidade.

  • O desenvolvedor não prestou atenção sobre as restrições desta funcionalidade.

  • Ou o time tem um grande problema em mãos, onde os requisitos não são respeitados.

Mas como este projeto é apenas para fins didáticos, este tipo de problema normalmente será resolvido de outra forma, que possivelmente será responsabilidade do desenvolvedor senior ditar os passos para resolver este problema de forma mais eficiente.

Espero ter ajudado!

Oi, Fabiano.

Obrigado pela resposta!