Contoso University Examples with CQRS, MediatR, AutoMapper and more
I was a bit surprised yesterday to see Scott Hanselman's post on my Contoso University sample app. That application basically takes the traditional Contoso University sample applications (of which there have been many), and try to adapt it to how our "normal" ASP.NET applications are built. Mainly these applications serve as working examples for our own internal teams, so that when we spin up a new application, we have something to work from.
These applications highlight our typical usage of:
- AutoMapper
- MediatR
- Feature Folders
- FluentValidation
- HtmlTags
- Filters
- Fixie
- Integration testing
- Respawn
- AppVeyor
- Octopus Deploy
To achieve a cleaner architecture. Since I'm just going off of the Contoso University samples from Microsoft, they're not the most complicated applications, but good enough for our purposes. If I was building an actual Contoso University like the sample, I wouldn't use many of these tools, but this application is "big enough" to show some different usages and give our teams a good starting point.
The different Contoso University samples I've created include:
- ASP.NET MVC 5
- ASP.NET Core MVC 1.0 on full .NET
- ASP.NET Core MVC 2.0 on .NET Core
- ASP.NET Core Razor Pages 2.1 on .NET Core <- most recent
There are a couple of other Docker-based versions, too, but those are more experiments than examples for our team.
I like the Contoso University sample applications because they're big enough to give me an idea of a typical server-side application and how our toolset can be applied, as well as a way for me to test out our toolchain without worrying about breaking our client's code.
In a future series, I'll walk through each of these tools specifically on some of the motivations, but for now, I just like having something I can pull down and experiment with!
We at Headspring do a number of other different kinds of systems, from Xamarin, WPF, React/Redux w/ ASP.NET Core Web API, so I'd love to build versions of Contoso University for those.
However, the challenge is finding someone else that's already put in the work for a decent, full-featured sample app! If you find one for those platforms, please let me know because selfishly, I'd love to build living, working examples for our teams :)