1
resposta

Encapsulamento x Coesão - Solid

Boa tarde,

Na aula sobre coesão em resumo o instrutor fala sobre a importância de separar em outras classes métodos que não são responsabilidades da classe.

Nesta aula https://cursos.alura.com.br/course/solid-orientacao-objetos-java/task/85733 posterior a sobre coesão, sobre encapsulamento o instrutor mostra um model de funcionario e dentro dele, um método para o aumento de salario. A justificativa é que ali ninguém vai poder alterar o salario do funcionário e ficaria bem protegido, diferente de ter get and set para o atributo salario.

Minha pergunta é... a classe possui um set salario... se alguem injetar a classe funcionario e usar o metodo set salario pode alterar o valor do salario sem problemas, ou seja, esse encapsulamento para proteção não adiantou de nada, certo? Segue o exemplo:

public class Exemplo {

.....

@AutoWired
Funcionario funcionario;

funcionario.setSalario (5000);

Outra coisa, se é importante separar métodos, e ali é um método especifico para salario, não seria melhor ter uma outra classe com esses métodos, por exemplo uma classe sei la FuncionarioUtil e separar todos os metodos referentes a funcionarios la ?

1 resposta

Oi Lars,

No caso de atributos que possuem regras de negócio e validação o ideal é remover o métodos set, para evitar uma quebra de encapsulamento.

Se for algo simples, prefiro deixar na própria classe os métodos de manipulação de tais atributos, para manter a coesão do objeto.

Mas nos casos de validações mais complexas, que às vezes até precisaremos realizar consultas no banco de dados, o ideal seria separar em alguma classe de serviço.

Entretanto eu não chamaria essa classe de FuncionarioUtil, pois é um tipo de nome de classe bem vago e não diz ao certo que o acontece ali dentro. Prefiro algo como ReajusteSalarialService, ou algo do gênero.

Bons estudos!