I have now spent one month “developing with” and “living with” Sitefinity 3.1. Let me summarize Sitefinity:
Sitefinity is a Ferrari without the radio, windshield wipers, antennae, windows, paint, and seat cushions. You get the impression that you’re sitting inside something great, but damn it’s uncomfortable.
When Sitefinity works, it’s a marvel to behold! I love being able to drag & drop complex controls onto my pages and use friendly control designers to customize them. All of this is built upon an incredible CMS! Once everything is in place Sitefinity empowers anyone to build wonderful web pages. For me, it made web development fun again.
However, you have to first build those controls and, my friend; you’re in for a bumpy ride. Let me tell you why.
Documentation
Telerik has supplied some help files with Sitefinity; included in this is an API reference. The API reference looks a bit like what MSDN would look like if there was absolutely nothing written about anything. Guessing what some of these classes, methods, and properties do is hours of fun.
There are also some sample projects. One of them is a fake university web site and the other demonstrates a sample “Jobs” module. Having these samples was very much appreciated! However, neither of these samples demonstrates how to really use the core Sitefinity framework.
Let me give an example, I simply wanted to fetch the 10 most recently modified pages in Sitefinity in order to create a “What’s New” control. To accomplish this I needed to utilize the underlying Sitefinity CMS framework. As of this writing I am still having problems getting this accomplished. I cannot find anything in the documentation or samples that would even begin to describe how to accomplish this very simple task.
At nearly every stage of development I have felt like a pioneer who is mapping previously uncharted realms. That might be fun to some people, but it isn’t to me. I just want to get the project done and move on.
Sample Code & Projects
As mentioned Sitefinity comes with a couple of sample projects; in addition to these Telerik sporadically maintains a Sitefinity Blog. Here they post additional samples and tips.
I have this strange theory about application programming. I believe a good programmer needs to have a special blend of intelligence & stupidity and energy & laziness.
Let me explain; intelligence allows a programmer to come up with effective solutions. Stupidity ensures that those solutions aren’t too “clever” and therefore inaccessible to others. Energy gives the programmer the perseverance needed to overcome technical hurdles, while laziness ensures that the solutions are not difficult to manage or implement.
The code samples on Sitefinity’s Blog appear to be written by very intelligent & energetic programmers. As a result, I pretty much hate them.
Here is an example, recently Telerik posted a sample “Contacts” module. Please note, it has taken months to complete this module and when I ripped into the code it became obvious why. It is a perfect model of standards & practices. They fully implemented MS’s Provider Model. What does that mean? That means you could drop-in XML as a replacement data store. Granted that XML layer isn’t created, so you would have to create it yourself; but you could do it. Neat, right?
Not really. Implementing the Provider Model means adding several abstraction layers; which basically doubles the size of the project. It requires you to add special sections to your “web.config” and generally makes everything harder than it should be.
So I ask; do you really want to replace your data access layer with XML?
I’m sure this stuff has its uses. For the average project, it’s overkill though. Which means this sample code is overkill and does not serve as a reasonable template for creating your own Sitefinity modules. This overkill “feel” is pervasive with Sitefinity. As you work with the CMS framework you'll constantly be passing empty objects or strings just to satisfy strange unexplained constructor requirements. These Telerik chaps seem to think nothing of writing 200+ lines of code and creating 4 layers of abstraction to accomplish some simple task.
A good framework makes simple tasks simple and complex tasks possible. Sitefinity is not yet there.
Conclusion
Would you believe despite all of this I LOVE Sitefinity? My biggest fear is that, because of the annoyances listed above, people won’t give Sitefinity a chance. Consequently we will never see this product flourish as I know it can.
I have tried to leave a trail of discoveries in the Sitefinity forums. It is my hope that my own tribulations will help others. I will also try to find time to post some of the controls that I have created.