Build Your Own Application Framework with ASP.NET MVC 5

Welcome to this review of the Pluralsight course Build Your Own Application Framework with ASP.NET MVC 5 by Matt Honeycutt.

Matt is a software architect specializing in ASP.NET MVC web applications. He has over a decade of experience creating web applications. As an avid practitioner of Test-Driven Development, he has created both the SpecsFor and SpecsFor.Mvc frameworks. Matt has served as the lead developer on numerous multi-million dollar software projects and enjoys finding elegant solutions to difficult problems.

On Github, he has published the Heroic Framework and the Fail Tracker web app. These projects feature much of the code and techniques that are covered in this course.

Also in this series:
Part 2 – The Power of an Inversion of Control Container
Part 3 – Optimize Your Controller Layer
Part 4 – Optimize Your View Layer
Part 5 – Optimize Your JavaScript

Build Your Own Application Framework with ASP.NET MVC 5

This is the final course in the Web Application Development with ASP.NET MVC 5 learning path.

In this learning path I found Scott Allen’s courses very helpful when I was just getting started with MVC, and got quite a lot of value out of Jason Roberts’ Automated ASP.NET MVC Testing: End to End. However my favorite course is this one by Matt Honeycutt.

This is also the course that you the reader voted for in a recent Twitter poll.

I first saw this a couple of years ago, but it is a pleasure to come back to revise and review it again today.

The aim of this course is to drastically improve your efficiency by turning ASP.NET MVC 5 into a framework that’s optimized for your day-to-day needs.

Topics covered include:

  • The Power of Inversion of Control
  • Optimizing Your Controller Layer
  • Optimizing Your View Layer
  • Optimizing Your JavaScript

It is not a course for beginners, so check out One ASP.NET From Scratch for getting started before starting this course.

How This Course Will Make You a Better Developer

  • Get More Accomplished
  • Write Less Code
  • Go Beyond the Basics
  • Make ASP.NET MVC Work the Way You Want It To!

The Life of a Developer

There’s a Lot to Think About!

  • Error Handling
  • Page Layout
  • JavaScript
  • Validation
  • CSS
  • Security
  • Data Access
  • Don’t forget the Business Feature!!

With all of these challenges, it is important to use a framework that simplifies these problems for us as much as possible.

Matt says we want our Application Framework to handle as many uninteresting concerns as possible. Which brings us to…

What Is an “Application Framework?”

Matt defines an application framework as the set of conventions and infrastructure that work together to handle common cross-cutting concerns for your application.

Examples include:

  • Data access
  • Dependency Injection
  • Logging
  • Error Handling
  • Security
  • Page Layout
  • Validation

A good application framework allows us to focus on developing the business features that we are paid to produce.

Convention over Configuration

This concept has been popularized by frameworks such as Ruby on Rails and ASP.NET MVC, and is a key concept throughout this course.

Matt explains that this principle

  • Emphasizes Reasonable Defaults
  • Allows us to only Specify the Unconventional Bits
  • Reduces the number of decisions we have to make
  • Eliminates distractions
  • Simplifies Day-to-Day development

Finally Matt says convention over configuration does not mean that we have to sacrifice flexibility. This is only the case with poor quality frameworks.

Application Frameworks Characteristics

Although Convention over Configuration is very important, Matt explains that there a lot more that goes in an Application Framework.

  • Your Application’s Architecture: N-Tier? Event-Driven? Other?
  • Infrastructure: services and behaviors that your application provides
  • Agreement across your team

In this lesson Matt also teaches the properties of good and bad frameworks

A Good Framework

Handles uninteresting concerns
Does not sacrifice flexibility
Conventions can be overriden progressively
Helps you and your team work the way you want to work

A Bad Framework

All of nothing (use exactly or not at all)
Is complex
Obfuscates code and logic
Is difficult to troubleshoot or debug
Is massive!

The ASP.NET MVC “Problem”

Matt says that ASP.NET MVC is a terrific starting point. However it has some problems.

There is a lot that it doesn’t do for us out of the box:

  • No IoC Container
  • Lacks Solutions to Common Problems (e.g. moving data between business entities and view models)
  • String-Based Helpers (don’t take advantage of the static typing capabilities of .NET)
  • Poor Abstractions (e.g. around HttpContext and SessionState)
  • Tends to promote Fat Controllers, including in some of the Microsoft documentation

Despite apparent attraction to Fat Controllers, Microsoft is in no way affiliated with Thomas the Tank Engine

In this course, Matt shows us how to overcome these problems and turn ASP.NET MVC into a productivity maximizing platform!


Let’s Be Heroes!

This course uses the a toy tracking tool called Fail Tracker as an example application. It submits bug reports, feature ideas and supports requests.

Matt warns that the content in this course should not be implemented exactly like a prescription.


A good Application Framework isn’t built, it’s grown.

The goal of an Application Framework is to make us more productive developers
by handling our day-to-day pain

Matt strongly advises against taking the kitchen sink approach, and recommends building out just the infrastructure we need incrementally.

We can achieve this by focusing on our most acute day-to-day pains.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s