Last evening (Thursday) I had the pleasure of being asked to speak at the monthly meeting of the Philadelphia Alt.NET User Group. As mentioned previously in this post here, I delivered my “Pragmatic Implementation Patterns for Domain Driven Design in .NET” presentation to an enthusiastic audience of about 40-50.
A big thanks to everyone who took time out of their busy schedule and other obligations to attend the meeting! The attendees were engaged, interested, and provided really great questions and feedback, both in Q+A during the presentation as well as in conversations afterward. As a presenter, there’s really nothing more satisfying than to give a talk to a room full of people genuinely interested in the information you have to share and to an audience willing to engage with the topic.
Thanks to Penn State Great Valley School of Professional Studies
A big thanks goes out to the Penn State Great Valley School of Professional Studies for providing a truly excellent facility for the meeting. As you can see from the photo at left, we were given a classroom-style room complete with A/V facilities and lots of comfortable seating for the attendees (some of which appear in the photo). Located in Malvern, PA just slightly north and west of Center City Philadelphia, this location was a little easier for me to get to from the greater NYC area at the end of the business day than downtown Philly would have been.
A special thanks goes out to Sharon Kauffman, Program Manager for the Continuing Professional Education program. She and her staff and faculty went well out of their way to ensure that the needs of the group and myself were entirely attended to both before and after the meeting. Her team is really to be commended for their professionalism and great courtesy in welcoming both myself and the Philly Alt.NET group into their campus.
In fact, the experience has me wondering if the NYC Alt.NET Group shouldn’t also try to reach out to other Continuing Education programs in the NYC area to see if similar kinds of spaces might be available for our own meetings!
(Surprise) Bonus: VB.NET Continuing Education Students in the House
As an entirely unexpected bonus, a class of about 15 students from a VB.NET Continuing Education class was able to sit in on my presentation for the first hour or so. Even though all of my code samples were in C# and my topic was clearly a pretty advanced one for a class of students without extensive career experience as OO software developers, I hope I did at least a passable job of trying to explain the high-order concepts at play in such a way that the content was still valuable to them.
When you’re delivering a presentation (as a speaker, teacher, or whatever) and there are two pretty disparate groups in attendance, it can often be hard to split-the-difference in a way that doesn’t leave one group bored to tears and another group feeling like they’ve just been dropped in the deep end of the ocean. I hope I managed to do a decent job of delivery of the material there!
Hitting the Target?
Since only about 20% of the attendees were already familiar with many of the concepts underlying Domain-Driven Design (DDD), in addition to talking about implementation patterns I also spent significant time digging more deeply into the high-level concepts and principles of DDD than I’d originally intended. Since I hadn’t prepared for that, those elements of my talk had to be more off-the-cuff than rehearsed.
Any time you as a teacher find yourself speaking more extemporaneously like that there’s a huge danger you run that you’re not structuring your delivery in a coherent manner so as to enable the attendees to follow your train of thought properly. In such cases, you can often find yourself delivering a stream of data devoid of proper context and that certainly tends to inhibit effective learning on the part of your audience.
Earlier today, however, I received an e-mail from an attendee from which I wanted to share an excerpt:
I did not get a chance to tell you how much I got out of [the presentation]. Your presentation was great and it really helped me understand DDD. It also helped me demystify a lot of the concepts. I realized that even if you do not practice pure DDD the overall concept of designing according to the domain’s own internal language is a powerful idea and one that can be used in most OO projects.
This kind of response is indeed heartening for a teacher to receive – its validation that for at least one attendee, the truly important parts of the content got through as intended! Several others that approached me in person after the meeting had similar positive feedback to share, so hopefully this means that attendees were able to glean value out of the content.
Presentation and Sample Code
For those interested in a copy of the presentation content, here are links to direct downloads of the materials:
As always with my content, please feel free to do whatever you want with it as you see fit but as a matter of simple professional courtesy I would request simply that if you plan to re-use the content to deliver a presentation of your own that you at least mention that my work formed at least some of your inspiration 🙂
Proteus Domain Foundation Project on Google Code
Those in attendance saw much of the sample code I showed make use of a set of DDD-centric helper classes that made implementation of some of the patterns much more straightforward. The binary of the assembly that contains these libraries is included in the code download of course, but for those interested in seeing the source code for this assembly I wanted to just mention that its all part of a project of mine that is available as open source and is hosted on Google Code as the Proteus Project.
As mentioned in the presentation, in addition to base classes that make it trivial to implement things like Entities and Value Objects in .NET by simply deriving from specific base-classes, this library also contains classes and interfaces to facilitate implementations of the Specification Pattern leveraging all kinds of boolean logic such as ANDs, ORs and the like.
Since this is open source, you can feel free download it, change it as you want to suit your needs, or just take a look at it to better understand how it all works.
Happy coding, everyone~!