D'abord, un peu de contextualisation. Je code une recherche à partir de Age -> Rate. Il y a 7 tranches d'âge, la table de recherche comporte donc 3 colonnes (de | à | taux) avec 7 lignes. Les valeurs changent rarement - ce sont des taux légiférés (première et troisième colonnes) qui sont restés les mêmes pendant 3 ans. J'ai pensé que le moyen le plus simple de stocker cette table sans codage en dur est dans la base de données dans une table de configuration globale, en tant que valeur de texte unique contenant un CSV (donc "65,69,0.05,70,74,0.06" est la façon dont les niveaux 65-69 et 70-74 seraient stockés). Relativement facile à analyser puis à utiliser.
Ensuite, j'ai réalisé que pour implémenter cela, je devrais créer une nouvelle table, un référentiel pour l'enrouler, des tests de couche de données pour le dépôt, des tests unitaires autour du code qui aplatit le CSV dans la table et des tests autour de la recherche elle-même. Le seul avantage de tout ce travail est d'éviter de coder en dur la table de recherche.
Lorsque vous parlez aux utilisateurs (qui utilisent actuellement la table de recherche directement - en regardant une copie papier), l'opinion est à peu près que «les taux ne changent jamais». De toute évidence, ce n'est pas vraiment correct - les taux ont été créés il y a seulement trois ans et dans le passé, les choses qui "ne changent jamais" avaient l'habitude de changer - donc pour moi de programmer de manière défensive, je ne devrais certainement pas stocker la table de recherche dans L'application.
Sauf quand je pense à YAGNI . La fonctionnalité que j'implémente ne spécifie pas que les taux vont changer. Si les taux changent, ils changeront si rarement que la maintenance n'est même pas prise en compte, et la fonctionnalité n'est en fait pas suffisamment critique pour que quoi que ce soit soit affecté s'il y avait un délai entre le changement de taux et l'application mise à jour.
J'ai à peu près décidé que rien de précieux ne serait perdu si je codais en dur la recherche, et je ne suis pas trop préoccupé par mon approche de cette fonctionnalité particulière. Ma question est la suivante: en tant que professionnel, ai-je correctement justifié cette décision? Le codage en dur des valeurs est une mauvaise conception, mais se donner la peine de supprimer les valeurs de l'application semble violer le principe YAGNI.
EDIT Pour clarifier la question, je ne suis pas préoccupé par la mise en œuvre réelle. Je crains que je ne puisse faire une mauvaise et rapide chose, et la justifier en disant YAGNI, ou que je peux adopter une approche plus défensive et exigeante, qui, même dans le meilleur des cas, a finalement de faibles avantages. En tant que programmeur professionnel, ma décision de mettre en œuvre une conception que je connais est-elle simplement défectueuse se résume-t-elle à une analyse coûts / avantages?
EDIT Bien que toutes les réponses soient très intéressantes car je pense que cela se résume aux choix de conception d'un individu, je pense que les meilleures réponses étaient @ Corbin et @EZ Hart car elles évoquent des choses que je n'avais pas considérées dans la question:
- la fausse dichotomie consistant à «supprimer correctement les valeurs codées en dur» en les déplaçant vers la base de données vs «appliquer efficacement YAGNI» en utilisant le codage en dur. Il y avait une troisième option de mettre la table de recherche dans la configuration de l'application, ce qui n'entraîne pas la surcharge de la bonne façon, et sans l'efficacité de YAGNI. Nous ne sommes généralement pas limités à l'une ou l'autre des décisions, et cela se résume alors à une décision coûts / avantages.
- la génération de code peut réduire la surcharge de déplacement des valeurs codées en dur vers la base de données, et d'une manière qui supprime également ma décision trop complexe de traiter un CSV dans la table. Cela ajoute potentiellement un problème de maintenance à long terme avec le code généré si les exigences de base changent pour la méthode de recherche. Tout cela affecte simplement l'analyse coûts / avantages, et il est probable que si j'avais eu cette automatisation disponible, je n'aurais même pas envisagé de coder en dur quelque chose comme ça.
Je marque la réponse de @ Corbin comme correcte car elle modifie mes hypothèses de coût de développement, et j'ajouterai probablement des outils de génération de code à mon arsenal dans un proche avenir.