... with IOC container and ORMs.
Long title for the very first day. And one that gives me the thrills I must admit.
Just the speakers' names and reputation set expectations very high: James Kovacs and Ayende. The former being one of my favorite speakers in the last edition and the latter being that non-human blogger with immense knowledge and an attitude (not that they need any sort of introduction but I like classifying the world around me -pun intended-).
And those expectations were not lowered during the agenda presentation: a day in which we are going to be focused on tooling (favorite of mine) that includes: AspNet Mvc, AutoMapper, Castle, Fluent NH, Nant, NHinbernate 2.1, Linq for NHibernate, NHinernate Profiler, Castle Validator, NUnit 2.5, RhinoMocks 3.5, Tortoise Svn and Visual Svn.
Wow! I am tired of typing already. And by then my arachnid sense was buzzing big time as it looked to me that it was a bit too much. And I hate being right.
It all started sour with logistic trouble accessing the SVN repository on James' laptop, meaning that there was not going to be a coding-session for me (mostly because I do not have the TON of tooling to be showed, just a handful of them).
As an appetizer: a user story and a BDD observation. Yummy and promising, as I am starting to grow interested in that style. It is also a perfect topic for lots of side-talking, and boy do the speakers like side-talking*.
From then we moved towards a philosophical question to the attendees: should we be explicit in the (our) API design when it comes to persist to the database or should we leverage NHibernate's capabilities for persistence by reachability? Tough question, that was properly explained by the speakers, after which the latter was chosen (by them).
But then it all went blurry as a lot of database talking took place, which led to some tricky NHibernate workarounds that needed to be done in order to dodge some issues with 2nd-level cache. The explanation of which was deeper than my narrow NH knowledge could handle and got my head spinning for the rest of the time remaining speaking about the subject (and was a lot).
While trying to get my mind in shape again the funky auto-mapping feature of Fluent-NHibernate blew the roof off (not literally, but at least the feature to be shown did not work as expected). Nothing major that a "good-old mapping classes" wouldn't solve, but still another bump in the path.
Time for some integration testing using Ayende's SqlLite fixture technique. Not overly cool (starting to get picky here) as I am no fan of SqlLite as a test database, mostly because I work with Sql Server, hence Sql Server CE (with all its caveats) as the weapon of choice for the task.
After lunch, a great deal of more NHibernate pearls and ways to handle the ISession. At last an IoC container was called into the game. A bit late if you ask me, but just about time if you ask someone else ;-) Fluent registration voodoo, lots of conventions and a word of advice against singleton components, which was demonstrated with the next piece of the puzzle: a simple Asp .Net MVC controller.
We were running out of time already but they showed a very nice trick to keep people alert after lunch-break: have the attendees to explain the application they have just built. Awesome for some people as it helps fixing the concepts and drives some interesting conversations, but embarrassing for the shy guys or those who did not fully get it :-p
Some more questions followed, some talking about old screw-ups with Microsoft technologies brought the point of how old I am becoming as not many people in the room could remember some of the technologies mentioned and I could :-(
It IS a great thing to hear the opinions and experiences of so talented people. Mostly because, I got some reassurance I might not be doing it all wrong and I got some new nice ideas that I might consider to implement when the chance shows itself.
Database segregation (one for OLTP and another for OLAP purposes) as a desirable target is something I've been hearing a lot lately, and they made their plea in a way that I almost buy it.
There IS a database after all. Persistence Ignorance can't be fully achieved (at least with NHibernate although it makes a hell of a good job) as there are leaks here and there.
I found room for disappointment too, since the goals were a little too ambitious and we did not get to use some of the tools and techniques I was hoping we could see (object-to-object mapping, validation,...). Whereas it got pretty deep in some other areas (mostly around NHibernate and databases). Agendas are there to be changed :-)
Overall, a terrific way to start the conference.
* Side-Talk: being a non-native speaker I love making new terms up to enrich the language. By "Side-talk" I mean to speak about things loosely related to the main topic of the conversation.