Mes meilleures pratiques pour ASP.Net MVC

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: