Używaj menedżera pakietów NuGet do zarządzania zależnościamiOpieraj się na abstrakcjachUnikaj słowa kluczowego newUnikaj bezpośrednich odniesień do HttpContext (używaj HttpContextBase)Unikaj magicznych ciągów tekstowychPreferuj modele zamiast ViewDataNie umieszczaj kodu HTML w logice aplikacjiNie umieszczaj logiki biznesowej w widokachNajczęściej używany kod widoków skonsoliduj w postaci metod pomocniczychPreferuj modele prezentacyjne, zamiast bezpośrednio używać obiektów biznesowychHermetyzuj polecenia if dla widoków w metodach pomocniczych HTMLPreferuj wyraźne stosowanie nazw widokówPreferuj obiekty parametrów zamiast długich list parametrówHermetyzuj współdzieloną funkcjonalność, logikę i dane za pomocą filtrów akcji lub akcji potomnych (Html.RenderAction)Preferuj grupowanie akcji w kontrolerach na podstawie ich powiązania z koncepcjami biznesowymiUnikaj grupowania akcji w kontrolerach na podstawie powiązań technicznychPreferuj umieszczanie filtrów akcji na najwyższym z możliwych poziomówPreferuj stosowanie wielu widoków i (lub) widoków częściowych, zamiast używać skomplikowanej logiki if-else do wyświetlania i ukrywania sekcjiPodczas przekazywania danych formularza preferuj wzorzec przekaż-przekieruj-pobierzPreferuj zadania startowe zamiast logiki umieszczanej w Application_Start (Global.asax)Preferuj atrybut Authorize zamiast imperatywnego sprawdzania zabezpieczeńPreferuj użycie atrybutu Route zamiast bardziej ogólnych tras globalnychRozważ użycie tokenu Antiforgery w celu ochrony przed atakami CSRFRozważ użycie atrybutu AcceptVerbs w celu ograniczenia sposobów wywoływania akcjiRozważ buforowanie danych wyjściowychRozważ usunięcie nieużywanych silników widokuRozważ użycie własnych obiektów ActionResult dla unikalnych scenariuszyRozważ użycie kontrolerów asynchronicznych dla zadań kontrolerów, które można wykonywać równolegle