1
resposta

sugestão javascript encapsulamento

O curso de Javascript avançado é bom, mas me incomodou um pouco que o professor fala como se encapsulamento fosse uma solução de segurança, inclusive na resposta do exercício 04-11 consta "Por conta disso, alguém mal intencionado pode fazer o que quiser com ela.". Isso está errado, encapsulamento é uma solução de engenharia de software, não de segurança, inclusive mesmo em linguagens que suportam private nativamente é possível violar esse acesso (no Java por reflection, no C++ por aritmética de ponteiros). Encapsulamento serve para deixar menos coisas acessíveis aos programadores para que não acessem uma variável interna e violem regras de negócio por engano (não por má-intenção). Vale lembrar que se estamos falando de javascript no front-end, a segurança deve estar na API.

Estou fazendo a sugestão aqui pelo forum, porque a feature de sugerir alteração no curso não permite alterar a resposta das perguntas. Mas reafirmo que é uma crítica construtiva =)

Obs: Em uns exercícios anteriores foi usado o operador % para evitar fazer um if(indice == 1) e fazer um arrow function de uma linha (sem a necessidade de usar a palavra chave return). Penso que um operador ternário teria o mesmo efeito e seria bem mais semântico.

1 resposta

Opa Felipe, tudo bem? Concordo contigo, mas veja por outro lado. Se existe uma preocupação de isolar o acesso pra que programaticamente não acessem e manipulem um valor que não deveria ser manipulado, isso não se torna uma prática de programação defensiva? Estou isolado por que não quero que externamente algo mude isso. Isso também não é segurança?

Encapsulamento não é proteger? proteger não é segurança?

Precisamos observar que segurança existe em vários níveis e aspectos, um exemplo? Pense na questão de escrever testes? Ela não é também uma questão de segurança para que o programador saiba quando algo quebrou em algum lugar? Entende que não é uma coisa direta, mas está relativa?

Note que não estou discordando de você. Quero apenas complementar para que a gente tenha uma visão mais ampla do cenário.

Encapsulamento serve para deixar menos coisas acessíveis aos programadores para que não acessem uma variável interna e violem regras de negócio por engano (não por má-intenção). Vale lembrar que se estamos falando de javascript no front-end, a segurança deve estar na API.

Correto, mas como você diz, estamos falando de JavaScript. Pode sim haver má intenção neste ponto, não só engano.

Concordo que a API deve ser programada seguramente. Mas isso não tira do front a responsabilidade de também ser segura e também de aplicar suas regras e validações.