Mon équipe crée de nombreux formulaires Web uniques. La plupart de ces formulaires envoient simplement un e-mail, et quelques-uns font une simple écriture de base de données.
À l'heure actuelle, chaque formulaire réside dans sa propre solution distincte dans Visual Studio Team Foundation Server. Cela signifie que nous avons près de 100 projets de formulaires différents, ce qui rend difficile le maintien de la cohérence. Chaque formulaire est unique en ce sens que les champs sont différents, mais tous font à peu près la même chose.
Je cherche à les condenser d'une manière ou d'une autre, et je pourrais vraiment utiliser quelques conseils.
- Dois-je essayer de créer un fichier de solution contenant tous nos projets de formulaire? Il n'y a pas beaucoup de code de plomberie, bien que je puisse créer quelques classes d'assistance pour aider au formatage des e-mails et autres. Il serait très utile de pouvoir partager CSS, JavaScript, des contrôles et des images sur plusieurs projets.
- Étant donné que nous sommes une boutique Microsoft, y a-t-il des avantages tangibles à utiliser quelque chose comme MVC sur des formulaires Web pour ce scénario spécifique? Je suis convaincu du concept de MVC dans son ensemble, mais est-ce que cela m'aiderait à créer un formulaire de collecte de données à 15 champs plus efficacement si tout ce formulaire consiste à envoyer un e-mail? Le formulaire qui m'a fait penser à cela avait une bonne logique intégrée pour afficher et masquer les champs en fonction des réponses de l'utilisateur et il semble qu'il aurait été moins efficace d'utiliser MVC et jQuery.
design
refactoring
Josh Earl
la source
la source
Réponses:
La refacturation en toute sécurité sans tests est difficile et lourde de dangers.
Je commencerais par:
Écriture de cas de test couvrant les différents types d'entrée dans ces formulaires et la sortie attendue. Il semble que cela ne prendrait pas trop de temps, car vous pensez que la plupart de ces formes sont identiques ou proches.
Exécutez ces cas de test sur les quelque 100 formulaires (activez la couverture de code pour vous aider à tracer les chemins de code).
Après cela, vous êtes en mesure de voir ce que vous pouvez retraiter en toute sécurité, alors vous pouvez (un exemple):
Exécutez votre outil de détection de duplication de code (vous ne savez pas comment il s'appelle dans .NET, en Java, nous avons CPD). Retirez immédiatement 13 formulaires identiques. Maintenant, relancez les tests - Yay! Ils passent tous sauf le formulaire 11, OK, nous ne pouvons donc pas encore le supprimer.
Supprimez tous les codes de mise en forme des e-mails locaux et obtenez tous les formulaires à appeler vers un module de traitement des e-mails commun. Exécutez les tests, ils passent tous sauf un, hhmmm OK .... Caractères UTF-8, corrigez cela dans le module générique, exécutez à nouveau les tests, yay nous sommes tous bons!
rincer et répéter.
la source
Je suggère de résumer la partie de la soumission. À l'aide de Modèle / Vue / Contrôleur, placez les formulaires dans la Vue et demandez-leur d'utiliser le même contrôleur. Ce contrôleur peut effectuer une action générique, comme envoyer un e-mail à une adresse par défaut, ou détourner les données du formulaire vers un contrôleur qui le peut. De cette façon, tout ce que vous avez à faire pour créer un nouveau formulaire est de créer le formulaire et de diriger la sortie vers ce contrôleur. Cette archétecture pourrait être contenue dans un seul projet, ce qui vous permettrait de partager CSS et javascript comme vous l'avez mentionné.
Pour gérer le formatage des e-mails, je commencerais par créer un formateur générique, disons celui qui répertorie simplement les noms et les valeurs des éléments de formulaire, ainsi que les autres types de métadonnées, comme le temps soumis, etc. Vous pouvez le rendre aussi sophistiqué que vous le souhaitez . Ensuite, si vous avez vraiment besoin d'une gestion plus personnalisée que cela, ajoutez une usine. L'usine retournerait une interface de formateur. Ensuite, dans l'usine, vous pouvez rechercher un formateur pour ce formulaire spécifique ou renvoyer le générique s'il n'en existe pas de spécifique. Cette conception faciliterait également les tests unitaires du contrôleur, car vous pourriez facilement fournir un formateur simulé à des fins de test.
Soit dit en passant, je ne mettrais pas l'adresse e-mail comme argument du formulaire. Si vous devez envoyer à plusieurs adresses, je vous suggère de disposer d'une table de recherche contenant tous les formulaires et l'e-mail auquel les envoyer. Cela pourrait être implémenté en XML ou en code (j'ai vu les deux, mais je ne suis pas certain si c'est mieux). Cela évitera aux spammeurs d'obtenir vos adresses e-mail à partir de la page du formulaire.
la source