Existem vantagens em codificar valores de dados em um programa?


13

Sou um programador autodidata e novato, então peço desculpas se não souber o que é o programador.

Estou trabalhando em um projeto no qual estou fornecendo dados, que serão atualizados continuamente, para desenvolvedores que essencialmente criarão uma ferramenta para gerar relatórios a partir de consultas nos dados.

Parece que todos os envolvidos pensam que precisam codificar valores de dados (não o esquema, mas os próprios domínios / valores) no programa de geração de relatórios.

Por exemplo, suponha que estivéssemos reportando sobre pessoal; o relatório seria dividido em categorias, com um cabeçalho para cada departamento e, em cada cabeçalho, haverá subtítulos de cargos e, em cada subtítulo, haverá uma lista de funcionários. Os desenvolvedores desejam codificar os departamentos e os cargos. Por outro lado, eu pensaria que eles poderiam / consultariam essas coisas em tempo de execução, classificariam os registros por eles e gerariam cabeçalhos de relatório dinamicamente com base em quais valores existem.

Como a lista de valores possíveis será alterada ao longo do tempo (por exemplo, os departamentos serão criados / renomeados, novos cargos serão adicionados), o código precisará ser atualizado continuamente. Parece-me que podemos pular as etapas de manutenção de código e organizar dinamicamente os relatórios.

Como não sou desenvolvedor, estou me perguntando o que estou perdendo. Quais são as vantagens de codificar valores em uma ferramenta como essa? É assim que os programas são projetados?



As guias estão cruzadas nos relatórios, o que significa que os valores nas linhas devem aparecer como colunas?
Tulains Córdova 9/08/16

1
@Brendan - Se você codificar os valores no relatório, precisará alterar a lista em DOIS lugares (fonte de dados e relatório), enquanto que, se o relatório for dinâmico, será necessário alterá-lo apenas em um local (o relatório) .
kwah

1
@Brendan, por que você terminaria com três locais? Talvez meu entendimento esteja incorreto, mas estou visualizando uma consulta sql para buscar dados de um banco de dados, o aplicativo agregará / agrupará os valores retornados por, por exemplo, o departamento. Se você deseja ter a sobrecarga de várias consultas de banco de dados, pode selecionar departamentos / títulos de função distintos, se realmente quiser. Em nenhum momento os dados existem em mais de um local - o relatório está sendo conduzido pelos dados.
kwah

1
@Brendan Também discordo de sua definição de estar em um só lugar - a maneira como você o descreve está em vários locais, espalhados por todo o código-fonte.
kwah

Respostas:


9

Wikipedia:

Codificação embutida (também codificada ou embutida) refere-se à prática de desenvolvimento de software de incorporar o que pode, talvez apenas em retrospecto, ser considerado um dado de entrada ou configuração diretamente no código fonte de um programa ou outro objeto executável ou formatação fixa de os dados, em vez de obter esses dados de fontes externas ou gerar dados ou formatação no próprio programa com a entrada fornecida.

A codificação embutida é considerada um antipadrão.

Considerada um antipadrão, a codificação rígida exige que o código-fonte do programa seja alterado sempre que os dados de entrada ou o formato desejado forem alterados, quando for mais conveniente para o usuário final alterar os detalhes de alguma forma fora do programa.

Às vezes você não pode evitá-lo, mas deve ser temporário.

Geralmente, é necessária codificação embutida. Os programadores podem não ter uma solução de interface de usuário dinâmica para o usuário final elaborada, mas ainda precisam fornecer o recurso ou liberar o programa. Isso geralmente é temporário, mas resolve, em um sentido de curto prazo, a pressão para entregar o código. Posteriormente, a codificação eletrônica é feita para permitir que um usuário transmita parâmetros que fornecem ao usuário final uma maneira de modificar os resultados.

  • A codificação codificada das mensagens dificulta a internacionalização de um programa.
  • Caminhos codificados dificultam a adaptação a outro local.

A única vantagem do código rígido parece ser a entrega rápida de código.


5
OK, mas a "única vantagem" costuma ser extremamente importante. As decisões de projeto na programação geralmente tratam da troca entre provas futuras e entrega rápida agora e, como tal, a codificação embutida pode ser uma escolha perfeitamente aceitável. Às vezes, a codificação não é uma má escolha de design.

-1 Não acho que seja uma resposta útil. Diz essencialmente que 'incorporar valores no código-fonte de maneira inadequada' é inapropriado. Acho que o OP quer orientação sobre quando as coisas podem pertencer ao código-fonte e, portanto, ficar fora da sua definição da Wikipedia.
22316 Nathan Cooper

A codificação embutida deve ser uma parte vital do seu processo, e considerando que um antipadrão está desatualizado na era dos microsserviços, com o tutorial do Angular Tour of Heroes sendo um exemplo de alto perfil de uma enorme casa de software que diretamente encoraja ou até mesmo exige. um passo intermediário. Além disso, ao migrar para dados dinâmicos, você ainda deve reter alguns dados codificados como um substituto, talvez controlado por uma variável de ambiente ou até mesmo uma alternância booleana no próprio código, para que erros e problemas de segurança possam ser adequadamente isolados no linha.
O que há em uma Pesquisa no Google em

24

Verdade? Não há casos de uso válidos possíveis?

Embora eu concorde que a codificação geralmente seja um anti-padrão ou pelo menos um cheiro muito ruim para o código , há muitos casos em que faz sentido:

  • simplicidade ( YAGNI ),
  • a entrada é realmente constante e nunca será alterada (ou seja, representa uma constante natural ou comercial ou uma aproximação de uma. por exemplo, 0, PI, ...),
  • software incorporado (restrições de memória e alocação vêm à mente),
  • software seguro (esses valores não devem estar disponíveis e / ou fáceis de decodificar ou fazer engenharia reversa, por exemplo, tokens e sais criptográficos),
  • código gerado (seu pré-processador ou gerador é configurável, mas cospe código com valores codificados),
  • e provavelmente mais alguns.

Ainda é um anti-padrão ? Então é excesso de engenharia ! É sobre a expectativa de vida do seu software !!

Não que eu esteja dizendo que existem muitas razões, e geralmente eu me recusaria a valores codificados. Mas alguns podem facilmente obter um passe por razões válidas.

E não supervisione o primeiro sobre simplicidade / YAGNI , pensando que é trivial: provavelmente não há razão para implementar um analisador maluco e um verificador de valor para um script simples que faz muito bem um caso de uso restrito.

É difícil encontrar o equilíbrio. Às vezes, você não prevê que um software cresça e dure mais do que o script simples como começou. Muitas vezes, porém, é o contrário: projetamos demais as coisas e um projeto é arquivado mais rápido do que você pode ler o Pragmatic Programmer. Você desperdiçou tempo e esforço em coisas que um protótipo inicial não precisava.

Essas são as coisas ruins com os Antipadrões: eles estão presentes nos dois extremos do espectro e sua aparência depende da sensibilidade da pessoa que está revisando seu código.


Isso é engraçado, porque eu mesmo pilotei isso, e era muito mais fácil, rápido e limpo para lidar com os valores dinamicamente. Eu fiz isso em Python, enquanto acredito que o produto final será codificado em Java - se isso fizer alguma diferença. Parecia um excesso de engenharia quando eu codificava os valores, porque cada coluna recebida tinha que ser rastreada em vários locais.
Tom

@ Tom: Você está dizendo que era mais fácil e rápido implementar (ou mesmo reutilizar) uma biblioteca de pesquisa de configuração do que usar um valor codificado? Ótimo para você. Além disso, não vejo como sua última frase se encaixa na definição de excesso de engenharia. Seria obviamente confuso e, obviamente, se for codificado e duplicado, é ainda pior (o que não era o ponto da sua pergunta, eu provavelmente não entendi, mas me pareceu que você queria dizer que o valor não era codificado no lugar sempre, mas em um único ponto do programa).
haylem

De qualquer forma, estou apenas apontando casos em que isso seria válido. Também estou apontando que seria controverso na minha última frase. Você não pode agradar a todos e as equipes têm pessoas com diferentes níveis de habilidade.
haylem

1
@ Tom, não se venda muito curto. Você está definitivamente em algo. Parece mais fácil e menos demorado escrever um algoritmo rápido para organizar os dados, observando os campos Departamento e Cargo, em oposição à codificação Department = ['IT', 'Sales', 'Operations', 'HR', 'Finance']. Também seria muito mais difícil manter a matriz codificada no caso de um novo Departamento ou Título ser introduzido.
Chris G

1
Você pode ter coisas mais complexas que ainda são sensíveis ao código fixo. Alguém que me lembre que escrevi alguns anos atrás foi todas as permutações possíveis de um conjunto de valores. Eu precisava encontrar uma direção válida aleatória, escolher uma permutação aleatória e, em seguida, obter o primeiro resultado válido era de longe a solução mais eficiente e, uma vez que estava em um loop O (N ^ 3), importava a eficiência.
Loren Pechtel 11/08/16

4

Às vezes, não há problema em codificar valores. Por exemplo, existem alguns números como 0 ou um ou vários valores n ^ 2-1 para máscaras de bits que precisam ter certos valores para fins algorítmicos. Permitir que esses valores sejam configuráveis ​​não tem valor e apenas abre a possibilidade de problemas. Em outras palavras, se a alteração de um valor quebraria apenas as coisas, provavelmente deveria ser codificado.

No exemplo que você deu, não vejo onde a codificação seria útil. Tudo o que você mencionou já deveria estar no banco de dados, incluindo os títulos. Até coisas que conduzem a apresentação (como ordem de classificação) podem ser adicionadas se não estiverem lá.


Obrigado. A ordem de classificação era a única preocupação que eu tinha. No entanto, no nosso caso, isso não importa, e eu nem considerei que poderia ser adicionado como outra tabela no banco de dados.
Tom

1
Devo observar que gerenciar tudo isso no banco de dados é uma opção. Você também pode usar arquivos de configuração ou outras soluções, mas a codificação parece ser uma má escolha. A opção DB é frequentemente usada porque é fácil criar uma interface para permitir que as opções sejam gerenciadas pelos usuários. Também existem ferramentas como essa, projetadas especificamente para esse fim.
JimmyJames

-1

A implementação de uma solução robusta que permita valores que, de outra forma, poderiam ter sido codificados para serem configurados pelos usuários finais exige uma validação robusta desses valores. Eles colocaram uma corda vazia? Eles colocaram algo não numérico onde deveria ter sido um número? Eles estão fazendo injeção de SQL? Etc.

A codificação embutida evita muitos desses riscos.

O que não quer dizer que a codificação permanente seja sempre, ou mesmo frequentemente, uma boa ideia. Este é apenas um dos fatores a serem levados em consideração.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.