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

Get's e Set's

Boa noite,

Ao invés de criar 1 get e 1 set para cada atributo como é feito no curso quando é necessário, eu fiz no meu projeto 1 metodo get que recebe como parâmetro o nome do atributo que quer receber e 1 set que passa o nome do atributo que quer setar e o valor do mesmo. Isso tem algum problema do ponto de vista de boas práticas, é mais recomendado fazer como no curso um para cada atributo ou não a nada especifico sobre isso se tratando de boas prática e esses inúmeros get's e set's eram mesmo didáticos?

Att.

5 respostas

Oi João tudo bom?

Legal sua ideia fazer tudo em um método só!

Só tem um problema nisso. A ideia do encapsulamento, além de impedir o acesso direto ao atributo, é garantir em um lugar a responsabilidade de população e acesso a esse atributo.

Ou seja, se temos um atributo nome, é no setNome que vamos dizer quais são as regras para popular esse atributo. E, no getNome dizemos como acessar esse atributo.

Supondo que temos um atributo CPF, temos o setCPF para dizer como popular ele, e o getCPF para dizer como acessar ele.

Se temos apenas um método que popula e retornar todos os atributos, não temos essa responsabilidade distribuida, percebe?

Isso geraria varios ifs no nosso método set pois para cada tipo de atributo especifico, temos uma lógica especifica de população. E cada atributo que surgir na classe, geraria mais um if no seu métido.

Essa consequencia de ter muitos ifs no código dificulta um pouco a leitura, o que prejudica a manutenção.

Espero ter ajudado =)

Abraço e bons estudos.

Boa tarde,

Perfeito André Chaves, muito obrigado pelo seu esclarecimento e concordo com você na questão dos métodos do tipo set, realmente é importante validar o que será setado nos atributos, mas por favor poderia me esclarecer no caso dos get's o que seria determinar como acessar o objeto, pois entendi sei lá um exemplo simples dos set's, esse atributo só recebe valores entre 1 e 5, outro entre 6 e 10 , tranquilo tenho vários métodos para não ter vários If's , mas no caso do get ele apenas devolve o valor do atributo, toda a responsabilidade de get estaria nesse método genérico em caso de manutenção ou necessidade as alterações seriam feitas nele, seria mesmo boas praticas fazer um get para cada atributo ? Você teria outro exemplo de uma necessidade e ter mais de um get's. Desculpe-me mas não consigo enxergar uma validação de um método get, ele apenas acessa retorna um atributo, sei lá kkkk .

Muito obrigado.

solução!

O get é mais uma questão semantica mesmo. A gente cria um get pra cada atributo que precisa ser acessado de fora da classe assim a gente evita ter que passar uma string e fazer os ifs em um get só.

Repara que passar uma string para um get pode dar problema também. Nem sempre a pessoa que vai dar manutenção no nosso sisema vai saber todos os atributos que tem na classe pra passar a string certa =)

Nesse caso, a gente precisaria abrir a classe, ver que tem um método get so, ver o nome dos atributos pra passar a string certa!

Isso quebra a ideia de encapsulamento, onde apenas a classe tem que saber quais são os atributos e a gente acessar eles pelos métodos publicos.

É mais uma questão de facilitar a manutenção e manter o código mais semantico =)

Abraço!

Olá,

Apenas como informação adicional, não conheço como é em PHP, mas em Java por exemplo temos frameworks ou até objetos internos da API do Java mesmo (no Java 8 os famosos lambdas, JSTL e as Expressions Languages, etc) que assumem que a partir de certas sintaxes do código, existirá um método get para aquilo. Com isso, não declarar estes métodos nas entidades, e fazer algo mais genérico poderia quebrar o funcionamento de ferramentas semelhantes, caso existam no PHP. Não sei dizer se tem ou não, mas fica algo a mais para se considerar.

Abraços.

André Chaves e Emerson Torres de Amorim, muito obrigado mesmo, aos poucos estou avançando nos estudos e vejo a importância das coisas, estava lendo um pouco sobre SOLID para saber o que era, e fazendo os exercícios do curso de PHP , vi mais sobre a importância de separar as coias, tanto para facilidade de manutenção quanto por exemplo caso for herdar esta classe.

Att.