1 – Ne pas utiliser les controlleurs par defaut
Supprimer les controlleurs Account et Home ce ne sont que de mauvaises pratiques ;)
2 – Utiliser l’inversion de controle
Pour ma part j’utilise Microsoft Unity 1.2 comme inverseur de controle, l’enorme avantage est que l’on defini au demarrage de l’application le mapping des services, ceux-ci sont résolu à la demande dans les controlleurs.
3 – Ne pas mettre de code dans le site et surtout pas de code behind
Sortir toute la logique dans une assembly a part qui sera testée, le projet web ne doit pas produire d’assembly.
4 – Ne pas utiliser de Magic strings
Eviter absolument les ecritures du type ViewData[“MagicString”] utiliser en lieu et place des vrais Models de manière à typer les vues.
5 – Controller toutes les Url sans exception
Eviter d’ecrire directement dans la vue du code comme <%=Html.ActionLink("title", "Account", new { myparam = "xxx" }) %>
mais plutot <%=Html.MyAccountActionLink(“xxx”)%> en ajoutant une methode d’extension “typée”
6 – Ecrire autant que possible toutes les routes
a lieu de :
RouteTable.Routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
ecrivez plutot une route pour chaque url avec un nom
RouteTable.Routes.MapRoute(
"Account",
"account",
new { controller = "Account", action = "Index" }
);
voir 5 pour typer les appels
7 – Proscrire l’utilisation du singleton System.Web.HttpContext.Current
un appel comme ceci dans une methode n’est pas testable
8 – Utiliser HtmlHelper ou UrlHelper
dès que la logique d’affichage dans la vue nécessite plus qu’une boucle ou une condition , créer une méthode d’extension qui génère le code HTML
9 – Utiliser les ActionFilters
Utiliser les ActionFilters pour mutualiser le code entre les controlleurs.
10 – Controller toutes les exceptions
Utiliser sa propre page d’interception des erreurs et logger les exceptions
[HandleError(View="500")]
public class AccountController
Utiliser un catchall pour les erreurs 404 et logger.
RouteTable.Routes.MapRoute(
"CatchAll"
, "{*catchall}"
, new { controller = "Home", action = "CatchAll" }
);
Attention mettre cette route vraiment en dernier.
Aucun commentaire:
Enregistrer un commentaire