I’ve been slowly moving towards .NET Core for awhile and have decided now is a good time to try and take the full plunge.
Initially it was just too new and incomplete to be of use. When .NET Standard reached v2 I started writing most library code in that instead of .NET Framework. By targeting .NET Standard those libraries could then be used by not only .NET Framework and .NET Core applications but also Mono, Xamarin, etc. Plus there are some other advantages to the way .NET Standard library projects work that I won’t go into here. But beyond libraries I only dabbled in .NET Core applications mainly because of Entity Framework.
Entity Framework has become an awesome, almost indispensable ORM in no small part due to the integration of LINQ. Entity Framework 6 is very capable and mature; It works. Entity Framework Core is a complete rewrite and lacks some of the capabilities present in EF6. Plus I personally find the emphasis on Code First and at best limited support for database first rather alarming. As someone with strong experience in both Software Engineering and Database Administration I’ve always suspected Code First would lead to compromises in the database. EDMX files may not be fun but they allow for a very productive workflow and don’t require any compromises.
Given the above and the fact that .NET Core has reached a good level of maturity I’ve decided it is time to set off on an adventure to explore what it can do, can’t do and how it works. In addition to .NET Core I’ll use this adventure to also try out some of the other new Microsoft technologies such as Xamarin.
To do this I’m going to come up with a small but meaningful (non-trivial) application to build. I’ll use SQL Server 2017 for database storage and make sure that the database schema includes important capabilities such as keys, indexes, GUIDs, etc. On top of that I’ll use ASP.NET MVC Core to build a RESTful API backend which will provide all the capabilities clients require. Then I’ll build multiple client applications using various technologies that access the backend API.
Now that Microsoft is finally playing nice with others there is literally a myriad of client possibilities! Just in the realm of web applications there is an almost daunting list of possibilities:
- Old school ASP.NET Core with MVC, Razor, Bootstrap and jQuery
- ASP.NET Core with Angular 2
- ASP.NET Core with Knockout
- ASP.NET Core with React
- ASP.NET Core with React + Redux
- Non-core ASP.NET MVC with Razor, Bootstrap and jQuery (for comparison)
- Non-core ASP.NET Web Forms since they are still used in some older systems
There is also an impressive list of non-web client possibilities:
- Windows Presentation Foundation (WPF)
- Universal Windows Platform
- Android using Xamarin
- iOS using Xamarin
- Mac using Xamarin
- Unity if I wanted to dabble in the world of game programming
- Maybe even a Linux client using Mono
It would be really interesting (and fun) to build all of those and then compare them. That would be awesome, but in reality I probably don’t have that much time to spend on this. At least for now, maybe I’ll keep this going and get to all of them eventually.
Regarding web applications Angular 2, React, and Knockout apps on ASP.NET Core is a really interesting and helpful blog post by Steve Sanderson.
I’ll detail my journey through the world of .NET Core in upcoming posts.