I like Sharp Architecture. I flirted with the .NET Entity Framework (too much hoo ha in .NET 3.5 and .NET 4.0 not ready yet) and Teleriks’ ORM (not used widely enough for my tastes) before settling on NHibernate. Once I did that, it was pretty easy to decide on using Sharp Architecture since it provided a more or less complete architectural framework built around NHibernate. I started out with pre 1.0 and upgraded to 1.0 when it became available.
I don’t agree with every choice Sharp Architecture made. For example, I prefer the Spark view engine over the standard .NET ASPX engine. I also rather like the xVal client-side validation library. None of this was a problem since I had the source. I modified the original code generation templates to generate Spark views instead of ASPX views. While I was at it, I had them generate the little bit of xVal stuff needed and also gave them the ability to read object properties from my existing database tables. I also had to work through issues related to the new file handling mechanisms in the latest version of the T4 template engine.
Most recently, I wanted to upgrade to the latest version of Fluent NHibernate because it fixed some annoying bugs. I checked with the SharpArch group and discovered it wouldn’t be upgraded for awhile yet. However, someone was kind enough to offer a set of steps for performing the upgrade. Perfect, I thought, and started to work through them. Turned out there were some breaking changes in Fluent that were not mentioned in the steps. No big deal. They got me 90% of the way there. I worked through the rest of the issues one by one and within a couple of hours I had everything working. Thanks again SharpArch community!
The next morning someone posted a question about upgrading to Fluent that I actually knew how to answer. I started to draft up a reply but quickly realized there was too much detail to stick in a post to the group. Instead, I made a long blog post and sent in a reply with a link to the blog. A few questions later I decided to post the upgraded SharpArch binaries as well. Before I knew it, I had spent more time helping others than I had spent upgrading my solution in the first place. Again, no problem. It was the least I could do to start to pay back all the thousands of hours of work that had been contributed by others to make SharpArch possible in the first place.
So what does this experience teach? Well, open source is a community effort. Don’t expect the community to jump in and solve your problems if you are unwilling or unable to take on some of the necessary work. Usually, it took a whole lot more effort than you realize to get the library to its present state and community members will not always have the time or inclination to immediately do what you want them to do. If you are willing to roll up your sleeves, open source does give you the ability to do what you want when you want it since you will always have access to the code. This is rarely the case with commercial products. Finally, when you do add some capability, contribute it back to the community to help make the library better for all.