fortement typé Voici la première question:Auto-générer une AppSettings classe
Est-ce possible? Je prends mon inspiration de Joe Wrobel's work (un redux du Codeplex project oublié). Ici, vous faites votre travail sur la création de votre profil pour le fournisseur, et il fait le travail de création de la frappe forte pour cela, en créant effectivement une façade pour la classe Profile.
Et maintenant l'histoire de retour!
Je n'aime vraiment pas magic strings. Ils sont assez mauvais et peuvent causer de sérieux problèmes quand il s'agit de mettre à jour votre application. Ayant travaillé dans des langages comme PHP et ColdFusion, je sais qu'il est facile de les mettre dans votre application et de les oublier jusqu'à ce que vous en changiez un. Et puis vous devez chasser chaque variante d'entre eux et les modifier en conséquence.
.NET n'est vraiment pas bien mieux si vous suivez les modèles d'applications 'out of the box'. Beaucoup d'exemples utilisent les appsettings dans web.config pour stocker divers paramètres. C'est en effet un bon endroit pour stocker, et est parfait pour la plupart des applications. Des problèmes commencent cependant à se produire lorsque vous commencez à les appeler directement - par exemple ConfigurationManager.AppSettings["MyAppSetting"]
. Alors vous n'êtes pas vraiment mieux qu'un utilisateur de PHP que vous êtes de retour à l'aide de chaînes magiques.
C'est ici qu'interviennent facades. Les façades offrent un moyen de créer un objet fortement typé à partir d'une chaîne magique en un seul endroit, et de faire référence au développeur par rapport au reste de l'application. Maintenant, au lieu d'utiliser un web.config pour contenir mes appsettings, j'utilise une base de données pour les contenir tous. Au démarrage de l'application, les combinaisons nom/valeur sont récupérées et sont ensuite ajoutées séquentiellement au ConfigurationManager.AppSettings
via Set
. Aucun gros (en dehors de la problem j'avais plus tôt!). Cette «façade d'application» est accessible par ma couche de données, couche de service et couche de présentation et contient des choses comme le mode application, quel point de service utilise yada yada yada et limite le besoin d'avoir à chercher de nombreuses chaînes magiques, jusqu'à deux cordes magiques - une (le nom) dans la façade, et l'autre (le nom et la valeur) dans le point de création (qui, pour moi est le db).
Cette classe de façade finira par devenir assez grande et je finirai par en avoir assez de devoir les mettre à jour tous les deux.
Donc ce que je voudrais faire est d'avoir une classe ApplicationFacade qui génère automatiquement chaque fois qu'une construction est terminée. Et maintenant, revenons au début ... Est-ce possible?
Ceci est une idée intéressante, mais je ne suis pas un grand fan de CodeSmith pour être honnête. En fin de compte, j'ai écrit une de mes classes, ce qui était nécessaire dans tous les cas car il n'y avait aucun moyen pour ma demande de déduire quel type mes appsettings étaient. –
J'ai ajouté un peu de code à mon message. J'espère que ça pourrait t'aider. – Cheburek
C'est une solution vraiment intéressante! Une chose qu'il semblait avoir des problèmes avec (et c'est VBs IsNumeric) est "0,5,0", que VB croit être une valeur numérique, même si je ne suis pas sûr de savoir comment! –