Entrei em um projeto e vejo que os outros desenvolvedores estão adicionando muita lógica nos setters de propriedades sintetizadas. Entendo como isso funciona, mas acho que dificulta a compreensão do fluxo do programa; ao ler o código, sempre que vejo self.something = whatever
, sempre verifico se something
o setter foi substituído.
Quais são as suas opiniões sobre esse tópico? Você acha que isso é um sinal de arquitetura ruim ou uma solução elaborada?
Eu ficaria feliz em ler mais sobre isso, se você tiver links / fontes relevantes, é muito difícil obter bons resultados no Google, então decidi perguntar aqui também.
Obrigado por qualquer resposta e observe que estou falando do objetivo C, caso você não tenha visto a tag (mesmo que não deva ser um problema específico do idioma).
Respostas:
Não
As propriedades foram inventadas para permitir que os projetistas de classe tenham lógica anexada a uma interface conveniente de acesso e atribuição de campo.
Quanto é muito? Depende das responsabilidades da classe. Aqui estão algumas coisas razoáveis para colocar em um configurador de propriedades:
A programação é mais fácil quando as classes têm interfaces que tornam óbvio o que a classe pode fazer, sem que os chamadores pensem sobre como está sendo feito. Colocar a lógica atrás dos configuradores de propriedades permite que as classes ocultem sua implementação atrás de uma interface simples. Para algumas classes, nenhum método é necessário. Basta girar os botões configurando propriedades e ler a saída obtendo propriedades.
fonte
Normalmente, os setters são usados para alterar o estado de um objeto sem efeitos colaterais significativos ou cálculos pesados; use métodos e funções para isso. O principal motivo da implementação do setter é alterar e manter um estado válido . Portanto, limitar o intervalo, definir sinalizadores para solicitar recálculo ou ajustar propriedades relacionadas é absolutamente aceitável.
fonte
Não sei sobre o objetivo C, mas, como você diz, parece uma pergunta bastante genérica para qualquer linguagem OO. Antes de tudo, e realmente relacionado a isso, ter ou não setters e getters é uma questão de discussão (em alguns casos, sua existência é justificada pelo uso de uma estrutura ou biblioteca).
Eu acredito que o nome do método deve explicar o que o método faz e todo o método faz. Além disso, a documentação associada a esse método deve descrevê-lo de maneira mais explícita. Nesse sentido, um nome de método no formato "conjunto" + {substantivo} não deve ter efeitos colaterais além de definir o valor de uma variável e essa deve ser a única ação associada a ela. A verificação da validade do argumento é aceitável, mas deve ser descrita em sua documentação.
fonte