My colleague Peter and myself got back yesterday from Austin, Texas where we had one of the greatest learning experiences ever: the Kaizen Continuous Improvement Conference. I've really been looking forward to this event and it exceeded my already high expectations.
Before the actual open-space conference, there were two days with workshops. In this post I want to highlight some things I learned from these workshops.
Advanced NHibernate (Ayende Rahien)
I guess that the speaker of this session needs no further introduction. As one of the major contributors of my favorite ORM, he is the right person to talk about some of its advanced usages.
Here are some random notes:
- The NHibernate profiler looks really cool.
- NH is not a 100% solution. Only use NH for an OO view of the world. If you're only interested in data or transforming/reporting, then use something else.
- A single session can have multiple transactions.
- NH 2.1 adds PostSharp support for removing the need for virtual properties/methods (proxies/lazy loading).
- Adaptive Domain Models (e.g. Rhino Security)
- Multitenancy (e.g. different domain models or databases for different customers).
- NH profiler is freakin' cool.
- NHibernate Search = Lucene.NET + NHibernate.
- Lucene.NET: file store + full text search.
- FullTextSearchSession only necessary for full text search (through its extra methods). Using a regular NH Session also ensures that the Lucene.NET index gets updated.
- NHibernate uses 4 different caches:§ First level cache (also identity map at the session level)
§ Second level cache (session factory level)
- Entities cache
- Collections cache
- Query cache
- Enable second level cache at entity level in the mapping files. This also goes for the collection and the entities that populate the collection!!
- Enable query cache -> SetCacheable(true) on criteria query and enable query cache in the configuration file.
- Cache regions -> SetCacheRegion on criteria query.
- Prevalence cache can best be used for smart clients (single machine).
- SysCache uses the ASP.NET caching (single machine).
- SysCache2 provides support for SQL dependencies for the ASP.NET cache (not recommended).
- MemCache is used for distributed applications.
- Velocity is also used for distributed applications.
- Did I already mention that the NH profiler is really cool, because it is.
DDD Chalk Talk (Dave Laribee)
This session was a real mind stretcher for me. I've come to realize that I need to reread the "blue book" again. I've got way too many notes from this workshop. I'll just put out some of the topics that were discussed:
- DSLs in relation to Rich Domain Model
- Publishing vs protecting a model
- Verbs vs Domain services
- Command Query Seperation
- Model Controller
- Test models (Michael Feathers)
- How to introduce/get started with DDD
- Bounded context vs Context maps
I saw that a lot of people were recoding this session, so I have a suspicion that it will become available somewhere very soon.
Jeremy and Chad shared their opinionated approach to using ASP.NET MVC for efficiently creating web applications. This very neat stuff is already lined out by this post from Jeremy. I heard some rumors on Twitter that Chad is working on releasing some of the code as open-source. The videos of this workshop are available here.
Presentation Patterns (Jeremy D. Miller and Glenn Block)
This was probably one of the highlights of the pre-conference workshops. There was this amazing back and forth between Jeremy and Glenn that I just forgot to make notes. I hope someone recorded this "masterpiece" because I want to watch it again. I thought that I already knew a lot about Passive View, Supervising Controller, Presentation Model and other companying presentation patterns. I soon realized that I am just a noob and took away lots of stuff from this session.
After the workshops, the open-space conference could finally begin ...