The purpose of Rhino Commons
Nathan has posted about utility libraries and he includes Rhino Commons there as well.
I don't see Rhino Commons as a utility library. At least not anymore. It certainly started its life as such, but it has grown since then.
Rhino Commons represent my default architecture. This is my base when I am building applications. It has some utility classes, sure, but it contains a lot more foundation and infrastructure components than anything else.
Comments
Is there a suggested best way to 'get into' Rhino-Commons? I mean, there is a lot of code, and some of it is, for me at least, not that easy to grog...
I am playing with RhinoCommons lately and I find it great. It's right that it's not easy to grab because there's a lot of stuff going on there, but after some time you will feel comfortable with it and start understanding what's going on. In the beginning, you can start using it without understanding completely what it does, and, like me, just post questions on the mailing list when you encounter problems.
Is there any document describing roughly what is in Rhino commons, or do I just have to examine the source?
I know you might not like this Ayende, but if you ever really organized and built on your commons, you would have a great application framework available :) (this is a compliment!)
Have you ever considered turning this into an open source project like Spring/Castle, etc... ? (installer/zip/rar with some samples, getting started tutorials, etc..). You have a good following and I'm sure people would step up and contribute.
ie. I've used your NHQG and found it to be invaluable in my project
On a side note, I really appreciate the work you have done with NHibernate and NHibernate.Linq - I was using this yesterday, and it's fantastic. (I'm looking for a NH 2.0 beta 2 NH.Linq assembly by the way...I have version for NH 2.0)
Your tests proved to be 'documentation' for me (the linq parts)
Thanks!
PS I'm looking forward to your book on Boo / DSL's
@neil
http://ayende.com/wiki/Rhino+Commons.ashx
http://michaelhanney.com/blog/2008/04/28/beginning-systemwebmvc-with-rhino-tools-castle-active-record-and-nhibernate/
http://frickinsweet.com/ryanlanciaux.com/post/RhinoCommons2c-NHibernate-and-ASPNET-MVC.aspx
Ayende, I found this utility project, thought you might be interested in what they borrowed from rhino: http://code.google.com/p/nflexo/
Thanks a lot Simone!
Googling "rhino commons documentation" didn't really help, so I asked!
This blog, basically.
There isn't any grand vision, there is just a lot of small modifications to the way you work.
I presented a lot of that when I talked about zero friction development environment.
Steve,
Rhino Commons are not an independent application framework. Instead, they are a set of components that represent a default architecture. A way of approaching project development.
I'll try to touch on that in a future post.
This work should never have had to be done
Indeed your commons is really, really good. Over the last year or so I realized after reading this just how destructive however all that work is from amazing talent and not so much so.. It's ubiquitous!
Without any plan to do so I realized that I've looked at 10 or so 'individial performer' superstars and thieir very personal work. You get teams so this is not about you, but I today went back to very my assumtion of vast overlap..
It's bad. But we all know that. Even I have this and have element I just think are better. The problem is the 'individual context of goodness' needs to go away to a 'systemic understading and lack of necessary debate' so we can grow .
It's as if the industrial revolution never happened and people were still debating the merits of craftsman Jim or craftsman Bob's rifles! And in many areas we do need to be there, but think of our progress in reuse/ I don't see it working as anytihing not code, is devalued. When I speak to simple SOA/Service Discovery, Versioning/managing dependencies and different branch evolutions which are assumed to merge at some point (but often cannot), etc, etc, etc
In fact that defines programming. We cannot accept the initial pain of learning rather then inventing as by definition it's harder and seems slower to 'learn'. I think none of us like to admit this but also just doing it makes many feal as if their 'in need of this other person' and often they absolutely KNOW they are so much better. When do people realize it's irrelevant if it is 'good enough'? It's waste...
. It's a lack of trust in their team-members often or what I see all the time:
a) A team agrees to try more reuse
b) the smartest guy in the room on the team (there is always one, and if not, it's a rare dream team, or their dead before starting) is appointed to write this code to minimize the mundane,
You all probably know the next part.,
As there is no expectation on this person and indeed on architects (it's what they are usually called for better or worse) to be a GOOD DESIGNER FOR USABILITY FIRST.
When I start working with teams and say the correctness/utility will often not even be quantified if the usability is not there. But then we have the issue of 'personal style'.
As there are many ways to expose functionality (but thank god we now are almost there with a far more concrete standard which I think Rhino Mocks is a perfect example of) or the 'in process' 'Expression Builder' (as Fowler calls it in his new DSL book) style.
But even that is known by what, 5% of us? Less? Fewer still have the skill to write to it, as you (amazingly to me) power it out for the NHibernate Query Generator when I knew that was what I wanted, but I was sure not going to do what you did (grin). Thank god you did however.....
And you see how you loved the Rhino Mock work when asked about what you enjoyed. I would submit the best 'architects'/whatever will enjoy this work the most as it fundamentally makes others so much better.
Also it STARTS with the set of nice utility calls. But the end-state absolutely in my opinion needs to be a technical DSL (I disagree with your position here on C# 3.0 as I find is more then good when combined with Custom Linq Providers as in 'Linq to Your Domain').
So we over time evolve this into the 'technical' bits, and indeed into the more holistic DSLs (I always end up with a portfolio of DSLs across targets, and your right, I'm stuggling with these decisions on how to seamless transition the experience from say the Microsoft DSL Graphical DSLs with code gen to the more details work done in the textual C# 3.0 internal DSLs. It works but will get better.
Anyway, not an answer but more questions (grin)..
Damon Wilder Carr
gttp://blog.domaindotnet.com
Comment preview