2009-12-18 4 views
2

Vous vous demandez simplement comment éviter Magic Strings dans Querystrings? J'ai beaucoup de code commeMagic QueryStrings - de bons modèles à éviter?

if (string.IsNullOrEmpty(request.Form["projectId"]) || 
    !int.TryParse(request.Form["projectId"],out projectId)) 
    return null; 

et naturellement, je dois coder en dur le projectId dans les pages d'appel. L'une des façons est d'avoir une classe "Dictionary" statique/const qui ne fait que définir une charge d'identifiants "QueryStringCreateProjectProjectId", mais ensuite je dois changer mes fichiers JavaScript pour qu'ils soient générés côté serveur. Maintenant, je me rends compte qu'il n'y a peut-être pas de solution parfaite pour ça parce que l'abstraction ne peut arriver que dans une certaine mesure, et à un moment je dois mettre des cordes et espérer ne jamais faire de faute, mais je me demande quelles solutions sont?

Faire de cette CW comme ceci est limite Poll/Subjective, mais je crois qu'il appartient à SO.

Répondre

4

Pour les paramètres de requête courants, j'ai créé une classe qui connaît tous les noms 'magic' (constantes de chaîne) pour créer des liens vers différentes pages du site. J'ai mis quelques propriétés, et la classe émet une étiquette <a> avec l'URL appropriée. Aucun de mes liens n'est codé en dur - toutes les URL internes sont construites en utilisant cette classe.

Une autre classe utilise le même ensemble de noms de chaînes constantes pour lire la chaîne de requête dans une requête. Je crée un objet avec cette classe quand je reçois une requête, et mes pages peuvent alors lire les valeurs nécessaires à partir de cet objet (encore une fois, sans avoir à connaître les chaînes magiques). Chaque zone du site qui possède son propre ensemble de noms 'magiques' en dehors de l'ensemble commun peut ajouter des paramètres à un lien (en utilisant une méthode dans la même classe de générateur de liens), puis les lire à partir d'une chaîne de requête la manière habituelle. Ceux-ci devraient également utiliser des constantes, pour éviter les fautes de frappe.