Note: instead of lugging my laptop around, I decided to take notes.  We're on the lunch break now, so I'm gonna type up my notes from the first couple of sessions.

After a quick review of the “admin” slides showing us where the restrooms were and what the schedule was, Dave jumped right into his talk.

Basically he went over the typical architecture we all know and love:

UI->Business Objects->Data Access

although in this case, he expanded it.  I wish I had Visio on this system so I could replicate what he put on the whiteboard.  Maybe I'll scan my notes when I get home (or use Visio).

His expanded version included a UI Process layer (think MVC) and a Service Interface (basically another layer between the UI components and your business layers).  Behind the Service Interface, he had Business Workflow (think BizTalk), Business Logic and Business Entities. 

In the data access layer, he had the standard DAL along with Service Agents. 

Most apps won't have the Business Workflow and many won't have the need for Service Agents.

Service Agents manage contracts with external dependencies such as COM, web services or remotable components.  The agents also handle data transformations between the data access layer and the the business entities.

What's the difference between Business Entities and the Business Logic?  The separation of state and behavior.  I've used this pattern in the past and what it boils down to is that the Business Logic is an Entity manager.

Example:
CustomerEntity c = CustomerBO.GetCustomer(customerID);
c.PhoneNumber = “555.555.5555”;
CustomerBO.Save(c);

The Entity layer is pretty much just a property bag and the Business Logic is the gateway through which the UI components get their data.

Example:
countryList.DataSource = CustomerBO.GetCountryList();

I really like Dave's style...he's very entertaining and appears to know what he's talking about. :-)

There were a lot of good questions from the audience.

Dave talked about deployment and it really boils down to your infrastructure.

Someone asked about how ORMs fit into the mix.  Dave had a lot of good things to say about NHibernate.

The Service Interface wraps all calls to the Business Logic in try...catch blocks.  It should write the exception to a log and then allow the exception to bubble up.  If no Service Interface, the Business Logic should handle this.

I've decided to switch from the 'Agile Development' session to James Avery's session on NHibernate.

Overall, Dave's session was great!  Another reason I'll keep reading his blog.