ASP.NET Core, ASP.NET Core MVC, MVC 5, .NET Standard. All of these technologies are going to play a significant role in the upcoming four years of Kentico EMS. The plan is still rough around the edges, but it is a long journey. Therefore, it's important to share the details we already know and give all of you a chance to express your ideas along the way.
Introduction
MVC is an architectural pattern that divides an application into three interconnected parts. The abbreviation stands for Model-View-Controller. MVC pattern has numerous implementations and not only in the Microsoft world. There are other frameworks such as Django, Rails, or Zend Framework that are not based on .NET technology, but use the MVC pattern. Microsoft's ASP.NET MVC is the one we will discuss more.
The web application framework, ASP.NET MVC, is based on ASP.NET and therefore closely tied to the .NET Framework. There's also a set of tools for building RESTful applications on the .NET Framework called ASP.NET Web API. However, I'm not going to discuss this part here.
ASP.NET Core is a complete web framework that can be run either over the full .NET Framework or over the .NET Core which is a multiplatform framework. What's important is that ASP.NET Core MVC is just a presentation framework for ASP.NET Core. Though it is usually developers’ default choice, it's still optional. Developers can use it for web application development, API development, or both.
Where is Kentico Now
Kentico EMS administration with Portal Engine development model is currently built using the ASP.NET Web Forms programming model. This means it‘s tied to the full .NET Framework. When it comes to our MVC support, and I will silently ignore the first MVC support in Portal Engine, we have decided to isolate the MVC application from the administration. Therefore, the administration part of the system, let's call it "The Mother", can still run on Web Forms but it can support external MVC applications running on MVC 5.
Simply put, MVC developers can run Mother side by side with their external MVC site. The MVC site will use the one NuGet package with our assemblies with business API (Kentico.Libraries) and MVC related packages (e.g., Kentico.Web.MVC, Kentico.Content.Web.Mvc, etc.). The picture below demonstrates the current MVC 5 support in Kentico.
The First Step toward ASP.NET Core
Needless to say, the switch to ASP.NET Core is a time-consuming and challenging project. However, we are highly motivated to keep pushing toward ASP.NET Core and ASP.NET Core MVC. It's because the strength of EMS was always a robust and flexible platform, and we want it to stay that way for the years to come. We want to make sure that every partner building digital projects with Kentico EMS can use the latest technology to benefit their projects.
Our first aim was to understand better what needs to be done to run a sample Dancing Goat MVC demo site on EMS and ASP.NET Core. This analysis gave us a list of crucial parts that will need a change. The million dollar question was where to start and what will be our aim for version 12?
We examined three possible strategies. One strategy was to support only ASP.NET Core MVC running over the full framework. This solution delivers all bells and whistles of ASP.NET Core MVC API and syntax, however, it's dragged down by the full framework. The dependency on full framework mitigates some of the ASP.NET Core's advantages. One example could be the cross-platform deployment.
The support for ASP.NET Core with a mandatory dependency on the full framework may effectively ruin its adoption. Microsoft announced that with .NET Standard 3.0, ASP.NET Core wouldn't be compatible with the full framework. This information and our estimates make the first strategy non-viable for us.
The second strategy was to create a Web API endpoints for Mother's functionality and deliver a new .Net Core SDK. The Web API will be very beneficial to the future as it may open the door to a bunch of other SDKs. PHP, JavaScript frameworks, you name it. However, it comes at an enormous cost. According to our estimates and the amount of extra maintenance it will bring, makes it non-viable as well.
The last strategy was to support ASP.NET Core MVC without the full framework dependency. The idea is to deliver a new NuGet package similar to the Kentico.Libraries compatible with .Net Standard 2.0. It will allow us to use the same assemblies in Mother, MVC 5, which runs over the full framework but also in an external MVC site running over ASP.NET Core 2.0.
If you are familiar with changes that .NET Core brings to the table, you know there are a lot of massively used parts of ASP.NET that are not supported in ASP.NET Core. Which means we have to write the "Core" alternative for them. The tricky part is that Mother still needs the old implementation or a massive rewrite. To overcome this hurdle, we need to introduce new NuGet packages. One for the Core specific implementation and one for the full framework.
.Net Standard
We chose to go with the third strategy. The plan for Kentico 12, "The Raptor", is to deliver .Net Standard assemblies as a NuGet package. This will allow dev teams to use these assemblies for their .Net Standard/.Net Core applications and also to create custom .Net Standard libraries or ASP.Net Core/ASP.NET Core MVC applications connected to Kentico. The next step is to deliver ASP.NET Core MVC assemblies (distributed as a NuGet package) with additional features for ASP.NET Core MVC development.
Future
In case we won't be able to port all assemblies to .NET Standard in version 12, we will cover the rest in the following version(s) as well as the ASP.NET Core MVC packages. Having this done, we will then deliver a Core version of Page Builder, currently running on MVC 5, and after that, we will discuss the full switch for the Mother.
This is our technology vision for the product. Nevertheless, it's not the only thing we are, and will be working on. Side by side with our technology path, we will work on new features, extensions, and other useful updates.
One final piece of information; nothing really changes when it comes to standard Web Forms development in Kentico. We don't plan to get rid of the Web Forms support or the Portal Engine in the near future.
Let us know your thoughts in the comments below!