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?
Respostas:
Wikipedia:
A codificação embutida é considerada um antipadrão.
Às vezes você não pode evitá-lo, mas deve ser temporário.
A única vantagem do código rígido parece ser a entrega rápida de código.
fonte
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:
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.
fonte
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.À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á.
fonte
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.
fonte