BlogEngine.NET 3.2 Released
The year wouldn't be complete without it :) It took a lot longer then I hoped, for variety of reasons, but finally went live. New version is much more pleasant to use, it is improved and simplified in many ways. Besides new design, it went through lots of code changes which may not be obvious and this is what I want briefly explain here.
The state of affairs
The project was built in ASP.NET 2.0 time and this shows. It is heavily server-side, with WebForms and user controls on the front end. Obviously, not an optimal these days. During long run, project grew by including lots of code from many people. This is great, but it gets less consistent, harder to maintain with less interest from developers who usually interested in very latest tech to sharpen their skills. To keep it alive and well, we have to push tech side to keep up with time. And this was one of the biggest reasons for 3.2 release.
The 3.2 update
3.2 followed the previous releases modernization path - all new development focused on client side using HTML5/JavaScript and refactoring server-side code trying to get rid from dependencies on WebForms with user controls etc. Currently admin panel almost completely based on HTML templates with AngularJs calling Web API services, with back-end following repository pattern. This all can be easily ported to MVC style application if needed. There was no focus on new features, yet some added, like Facebook comments, along with many improvements to web gallery, editor, file manager, settings and so on.
Future direction
There are two opposite ways to go when you need to bring old code base to the latest tech. You can start from scratch and move your way up, adding features. It seems simpler and cleaner - unless you tried it before. If you did, you know it takes ten times more effort you thought it would and won't guarantee your code will be much better. Inevitably, you'll be reinventing lots of wheels with various success and find yourself diving into old code and borrowing a lot. I don't like this.
The other way is to re-think your code and start pushing it to better state piece by piece. Split it into components and modernize them one by one. That seems like a lot more work, but it is not. In fact, I believe with "real" product this is the only way - you don't disrupt your customers and do migration behind the scene as much as possible. In case with BlogEngine, we can switch URL rewrite to routing. Then get rid of user controls in widgets, modernizing entire widgets framework. Then take care of themes removing remaining user controls. At this point, it is MVC ready. And MVC project can eventually start taking advantage of new features in MVC5, like platform portability, code editor independence and so on. I know it is not as exiting as jumping right into new environment, but this is where it is going, and I'm ok with that. In fact, in my experience this is the most practical skill developer needs to master.