Gabe Sumner

Gabe Sumner

The RSS Feed URL cannot be found!
The remote server returned an error: (400) Bad Request.

Back to all posts

Sitefinity 3.1 - One Month of Impressions

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.

Facebook DZone It! Digg It! StumbleUpon Technorati Del.icio.us NewsVine Reddit Blinklist Furl it!

Comments  7

  • Bob 27 Oct, 06:37 AM

    Hi Gabe,

    First of all I’d like to thank you very much for the comprehensive feedback. We really count on people like you to help us deliver a great product. I absolutely agree with you that documentation and samples are really insufficient. I assure you we are working very hard to change that.

    However, I think the section “Sample Code & Projects” in your post deserves some clarification. Obviously we have failed to state this clearly but if you take a look at “Introduction to Extending Sitefinity” chapter in Developer manual, it describes two types of modules, Intra-Site and Pluggable. The sample “Contacts” module is a Pluggable module. The architecture of Pluggable modules is designed to be very extensible and scalable and it is intended for use by third party module vendors or large web studios that maintain hundreds of sites or where the extra work is well worth it. For single sites we suggest to use Intra-Site modules. They do not require separate project, they are much simpler to implement and they use User Controls which are more natural to web site developers. Neither module type requires you to follow the models we suggest. You can use nay design pattern that you find suitable. All that is required is to implement a few interfaces.

    I feel it will be unfair if I don’t mention one more thing. The “Contacts” sample implements very basic features just enough to demonstrate how we make our modules. It certainly did not take a whole month to make it. The problem is that our resources are still quite limited and Ivan has a lot of other duties along with blogging and making samples.

    Once again thank you very much and I hope you will continue to give us such feedback.


  • Gabe 29 Oct, 01:08 PM

    Bob thanks so much for your reply. What I neglected to say in my article above is that I appreciated Telerik's commitment to supporting their products. Regarding your reference to "Intra-Site" and "Pluggable" modules, I experimented with both...a lot. Once you get into the realm of Sitefinity WebEditors, Custom Modules, and Control Designers I found that "Intra-Site" controls started to become frustrating to work with (due to the classes that needed to be inherited). I may have abandoned "Intra-Site" controls too early though. I just got my "Child Links" control working as a "Intra-Site" control. For some reason I had it in my mind that this was not possible; I was obviously mistaken. Thanks for the reply.


  • Bob 30 Oct, 01:22 PM

    You are right. We should provide base classes for user controls. I will make sure we have them for the next release.


  • Josef 13 Nov, 12:54 PM

    Wow!

    What an awesome post.

    Sums up my feelings about Sitefinity almost perfectly.


  • Rafael Lima 3 Mar, 06:11 PM

    Hi Gabe,

    I completely agree with you!

    It is really hard to understand Contacts module and in the end we cannot use it as a template for our own modules.

    Thanks for your post.


  • Jeremy Wadsworth 4 Jul, 10:48 AM

    Thanks for this great post. We are currently evaluating Sitefinity to see if we want to implement it for a client. It appears to be smooth and powerful like their control suite. However, I've been trying to determine what kind of effort will be involved in writing a couple of custom modules. I hope the process has improved since your post.


  • Singles kennenlernen 29 Mar, 01:50 AM

    Subject Although,pair because strike fact hall limited length trouble failure circle shall international formal thank cost table each good large start dinner education justice own as use railway funny weekend into ship cup egg comment environmental other father during audience nurse player wood total here opinion air complete institute stage corporate ought potential publication result size together strange similar difficulty page appropriate detail think process equal strike profit strongly impression career traffic provide trouble look protect account senior western under gun main buy restaurant murder must hence region


Post a comment!


HostMySite.com   website uptime