Blogifier Restructuring Plans
For the last couple of months I've been working on the version of Blogifier that uses Blazor for the admin panel. The reason is, developers attracted to shiny new objects just like monkeys are, and I’m not exception. It's been a lot of fun and Blazor is really good for component-based CRUD operations, easy to use, intuitive and productive.
But for efficiently delivering read-only content, which is a main job for a blog proper - Blazor is not such a great fit. So I tried old and tested MVC approach with server-side rendering and it worked much better in almost every way, removing all kind of hacks and workarounds that I had to use in SPA solutions. The end result is light-weight MVC blog using Blazor for all admin needs. I believe this is the best of two worlds right now. Anyways, to clear things up:
Under "Blogifier" umbrella, it is going to be two web applications.
Is existing multi-user blogging app that uses Angular front-end.
Personal single-user blog with MVC themes and Blazor-based admin/back-end.
For those looking for ASP.NET Core blogging solution this is probably all you care about and can skip rest of this post.
What's going to work behind the scene is three shared code libraries with most of the functionality that rarely changed and can be kept backwards compatible relatively easily.
Is a heavy lifter, handling all database and file I/O operations and providing consistent service layer to others. It has built-in providers for SQLite (default), MS SQL Server, MySQL and PostgreSQL databases via Entity Framework Code First with migrations support.
Will only have REST APIs plus Swagger documentation, and use Core as a dependency. This library will be used by Angular front-end. Other solutions can be built on top of it too, like React or mobile applications.
Razor components library. It will be used by Blogifier.Blazor allowing it to be very light-weight. It can be reused in other compatible solutions in the future.
So that's the plan - structure Blogifier as set of reusable components. Code libraries should go to Nuget.org and web applications should use Nuget as a distribution channel. It’s a bit of an undertaking but I think it is worth it.