It just happens that I want to develop a Wordpress like Asp.Net Mvc 3 based blog engine/light cms and I thought it will be a very good project to show how to apply Domain Driven Design concepts and good developing practices. My goal is to try to explain as clear as I can the thought process, why I've chosen one approach over other and ultimately present a tutorial of building an asp.net mvc web application from scratch. Before anyone jumps and tells me that DDD is way overkill for a blog engine, I can assure you that is not, especially if you want a wordpress like experience. Besides, DDD is a mindset not a dogma (see my previous post).
I'm developing this, firstly because I need it and because I think choice is good and I can count a handful CMS based on asp.net mvc, but only 1-2 blog engines/light cms and afaik none reaches the level of features of BlogEngine.Net, nevermind Wordpress. The 'light CMS' part is important because it is a feature, I don't plan to build a CMS that can be converted into everything, you have Orchard for that. My purpose is to have a lightweight application base (that could be quickly customized) for easy blogging, online magazines and company sites. Light means less code, less complexity and smaller resource usage. My main inspiration will be Wordpress, not a mere clone but an enhanced .net powered engine (we keep the good stuff, add new features and throw away the bad stuff).
That being said, here are the features at a glance:
- User friendly - the second most important feature of any application (the first is actually solving the stakeholders problems)
- Designer friendly - good UI is paramount, eye-candy helps a lot and I have to make it a breeze for any designer to implement a theme.
- Developer friendly - flexibility and code maintainability are very important and it should be easy to extend the base code with new features.
- Support for multiple content formats - the user can write the content in html, bbcode, markdown etc. In my case, I really hate using a WYSIWYG editor and writing html by hand is not funny. A normal user might find it easier to use bbcode for example. Choice is good here.
- Themes - develop themes quicker and easier than in Wordpress
- Widget system
- Plugin system - to extend and enhance base capabilites, but not to transform it completely.
- Database flexibility - I've decided that using a RDBMS is the default functionality , although the application layering will make it easy enough to use something like NoSql, Xml files, RavenDb etc.
- Flexible content protection - from password protected to allow only users of a certain group, stealth posts (if you don't know the url you won't get to it easily) etc
- Multiple authors and user management
- Integrated backup strategy
- Support for multiple blogs
- Blogging hosting platform (in the future)
- SEO ready
- Html5 ready
and many more .
However, these are long term features and for the first release I'm aiming to support only some basic features. In fact the 0.0.1 version will be a working prototype but which I'll intend to use as my blog engine instead of Be.Net. I named the blog engine Fulldot and it will be open source (probably GPL licensed).
Stay tune for the next post in the series, about the application architecture overview.