Under the hood and working with .Net, TDD, Software Design, and Agile Stuff
I would never do this, but a "friend" of mine has procrastinated entirely too long and let a deadline for an article sneak up on him. Here's a couple ideas that my friend has for his next article. The article has to be on design fundamentals from a relatively ideology agnostic standpoint (not overtly pro-Agile or TDD in other words). His first article in the series on the Open/Closed Principle will appear next month. Please think about which topics would benefit your team members too, Mr. "I know the basics cold" Alpha Geek.
- "Design Vectors" / "It's the Little Things" / "A title that doesn't stink" -- Why do you care about Encapsulation, Coupling, and Cohesion. Then follow up with some heuristics to push your design towards these qualities. Tell, Don't Ask, Law of Demeter, Don't Repeat Yourself, and a bit on some Code Smells. My friend wants to sneak in an example of using a lambda expression to remove duplication. Yes, Mr. Alpha Geek, you've read the Pragmatic Programmer front ways, backwards, and sideways, but this is for a more general audience.
- Creational Patterns -- Builder, Factory, Abstract Factory. Then talk about using an IoC tool as a generic way to implement these patterns. The importance of separating functionality from the grunge work of assembling object graphs. My friend isn't that excited about this one.
- Object Stereotypes -- An introduction to the idea of object stereotypes from Responsibility Driven Design. Apply these stereotypes to some bigger patterns like MVC/MVP. It's an under appreciated topic.
- Inversion of Control as a Pattern -- Forget the IoC/DI tooling. Let's talk about how, why, and when this pattern is useful.
- Patterns for Persistence and Data Access -- Lots of stuff from Fowler's PEAA book. Unit of Work, Database Mapper, Active Record, Row & Table Gateway.
Anything sound good to you? My "friend" would appreciate some opinions here.
About Jeremy D. Miller
Jeremy began his IT career writing "Shadow IT" applications to automate his engineering documentation, then wandered into software development because it looked like more fun. Jeremy previously worked as a systems architect building mission critical supply chain software for a Fortune 100 company and learned agile development practices as a .Net consultant at ThoughtWorks, one of the pioneers of agile development. Jeremy is the author of the open source StructureMap (http://structuremap.sourceforge.net) tool for Dependency Injection with .Net and the forthcoming StoryTeller (http://storyteller.tigris.org) tool for supercharged FIT testing in .Net. Jeremy's thoughts on just about everything software related can be found on his weblog "The Shade Tree Developer" at http://codebetter.com/blogs/jeremy.miller, part of the popular CodeBetter site. Jeremy is a Microsoft MVP for C#.